Как использовать NSTask для запуска команд терминала в цикле в согласованной среде?
Я хочу использовать 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
полностью смоделировать Терминал?