Jak używać poleceń NSTask do uruchamiania terminala w pętli w spójnym środowisku?
Chcę użyć NSTask do symulacji terminala, aby uruchamiać polecenia. Kody w następujący sposób. Może uzyskać wejście w pętli i zwrócić wyjście procesu.
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);
}
}
Moje pytanie brzmi: kiedy pętla jest zakończona, działające środowisko przywraca stan inicjalizacji. Na przykład domyślną ścieżką do uruchomienia jest/Users/apple
i uciekamcd /
zmienić ścieżkę do/
, a następnie uruchompwd
, to zwraca/Users/apple
niż/
.
Więc jak mogę korzystaćNSTask
całkowicie symulować terminal?