Wie verwende ich NSTask, um Terminalbefehle in einer Schleife in einer konsistenten Umgebung auszuführen?

Ich möchte NSTask verwenden, um das Terminal zum Ausführen von Befehlen zu simulieren. Die Codes sind wie folgt. Es kann Eingaben in die Schleife erhalten und die Prozessausgabe zurückgeben.

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);

    }
}

Meine Frage ist: Wenn eine Schleife beendet ist, wird die laufende Umgebung auf den Initialisierungsstatus zurückgesetzt. Der Standardlaufpfad ist beispielsweise/Users/appleund ich rennecd / den Pfad zu ändern/und dann rennenpwd, es gibt das zurück/Users/apple eher als das/.

Also, wie kann ich verwendenNSTask das Terminal vollständig zu simulieren?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage