首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标-c:如何使用NSPipe输出NSTask中的非法命令回波?

目标-c:如何使用NSPipe输出NSTask中的非法命令回波?
EN

Stack Overflow用户
提问于 2012-05-16 15:04:58
回答 1查看 717关注 0票数 0

我有如下代码,没关系,但我有两个问题。

1)如果我向sh分配一些非法的分段,例如@"ls - l",则outString为null。也就是说,它不能捕获错误警告"ls:-:No此类文件或目录ls: l:没有这样的文件或目录“。我该怎么处理呢?

2)如何实现此函数:给定应用程序的当前目录为"/user/Doc",并且执行sh = @"cd /",然后执行sh = @"ls -l",以便在下一个循环中查看"/“目录下的内容。但是,当新循环开始时,当前目录将恢复为"/user/Doc“。如何保持上一个循环的任务环境?

此外,我是否可以像直接在终端上工作一样,一直运行"/bin/sh“?

代码语言:javascript
复制
NSString *sh = @"ls -l";
while(sh != @"end"){
    NSTask *shData = [[NSTask alloc] init];
    [shData setLaunchPath: @"/bin/sh"];

    NSArray *args;
    args = [NSArray arrayWithObjects: @"-c", sh, nil];
    [shData setArguments: args];

    NSPipe *myPipe;
    myPipe = [NSPipe pipe];
    [shData setStandardOutput: myPipe];
    [shData setStandardInput:[NSPipe pipe]];

    NSFileHandle *file;
    file = [myPipe fileHandleForReading];

    [shData launch];

    NSData *data1;    
    data1 = [file readDataToEndOfFile];

    NSString *outString;
    outString = [[NSString alloc] initWithData: data1 encoding: NSUTF8StringEncoding];

    NSLog(@"%@",outString);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-16 15:25:36

  1. 该字符串处于标准错误,而不是标准输出。由于您不检查错误流,所以您将找不到它。

  1. ,这不是子check的工作方式。谷歌搜索“为什么cd是外壳内置的”以获取大量信息。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10621348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档