Как использовать 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 полностью смоделировать Терминал?

Ответы на вопрос(1)

Ваш ответ на вопрос