【发布时间】:2012-11-04 09:24:59
【问题描述】:
我想使用 NSTask 来模拟终端运行命令。代码如下。它可以循环获取输入并返回过程输出。
int main(int argc, const char * argv[])
{
@autoreleasepool {
while (1) {
char str[80] = {0};
scanf("%s", str);
NSString *cmdstr = [NSString stringWithUTF8String:str];
NSTask *task = [NSTask new];
[task setLaunchPath:@"/bin/sh"];
[task setArguments:[NSArray arrayWithObjects:@"-c", cmdstr, nil]];
NSPipe *pipe = [NSPipe pipe];
[task setStandardOutput:pipe];
[task launch];
NSData *data = [[pipe fileHandleForReading] readDataToEndOfFile];
[task waitUntilExit];
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", string);
}
}
我的问题是:当一个循环结束时,运行环境恢复到初始化状态。比如默认运行路径是/Users/apple,我运行cd /把路径改成/,再运行pwd,返回的是/Users/apple而不是/。
那么如何使用NSTask 来完全模拟终端呢?
【问题讨论】:
标签: objective-c command nstask nspipe