Como usar comandos de terminal de execução do NSTask em loop em ambiente consistente?
Eu quero usar o NSTask para simular o Terminal para executar comandos. Os códigos da seguinte maneira. Pode obter entrada em loop e retornar a saída do processo.
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);
}
}
Minha pergunta é: quando um loop é finalizado, o ambiente em execução é restaurado para o estado de inicialização. Por exemplo, o caminho de execução padrão é/Users/apple
e eu corrocd /
para mudar o caminho para/
e, em seguida, executepwd
, retorne o/Users/apple
em vez do/
.
Então, como posso usarNSTask
simular completamente o terminal?