다음과 같은 코드가 있지만 괜찮습니다.하지만 그것에 대해 2 가지 질문이 있습니다.Objective-c : NSPipe에서 NSPipe가 잘못된 명령 에코를 출력하는 방법?
1) 내가 예를 들어, 쉬 일부 불법 항을 지정하면 @ "LS - L"다음 outString은 null입니다. 즉, "ls : - : No such file or directory"라는 오류 경고를 캡처 할 수 없습니다. ls : l : 해당 파일이나 디렉토리가 없습니다. 어떻게 처리 할 수 있습니까? 나는이 기능을 구현할 수있는 방법
2) : 응용 프로그램의 현재 디렉토리 부여가 "/ 사용자/문서", 그리고 내가 수행 SH = @ "CD /", 나는 수행 쉬 = @ "LS -l "을 사용하여 다음 루프에서"/ " 디렉토리 아래의 내용을 봅니다. 그러나 새로운 루프가 시작되면 현재 디렉토리는 "/ user/Doc"로 재개됩니다. 마지막 루프의 작업 환경은 어떻게 유지할 수 있습니까?
또한 터미널에서 직접 작업하는 것처럼 "/ bin/sh"를 실행하기 위해 지속적인 작업을 수행 할 수 있습니까?
NSString *sh = @"ls -l";
while(sh != @"end"){
NSTask *shData = [[NSTask alloc] init];
[shData setLaunchPath: @"/bin/sh"];
NSArray *args;
args = [NSArray arrayWithObjects: @"-c", sh, nil];
[shData setArguments: args];
NSPipe *myPipe;
myPipe = [NSPipe pipe];
[shData setStandardOutput: myPipe];
[shData setStandardInput:[NSPipe pipe]];
NSFileHandle *file;
file = [myPipe fileHandleForReading];
[shData launch];
NSData *data1;
data1 = [file readDataToEndOfFile];
NSString *outString;
outString = [[NSString alloc] initWithData: data1 encoding: NSUTF8StringEncoding];
NSLog(@"%@",outString);
}
작업 디렉토리의 경우, 왜 [- [NSTask setCurrentDirectoryPath :]'를 사용하지 않을까요? –
그건 내가 필요로하는 것이 아닙니다. 내 목적은 다른 args를 사용하여 작업을 연속적으로 실행하는 것이지만 다음 실행 환경이 마지막 실행 출력에 의해 결정되도록 요구합니다. 예를 들어, "cd /"작업을 실행 한 후에 "ls -l"을 실행하여 "cd /"를 실행 한 결과 "/"디렉토리 아래의 모든 내용을 표시하려고합니다. –
Apple의 의사는 "NSTask 개체는 한 번만 실행할 수 있습니다."라고 말합니다. 쉘 서브 프로세스가 런타임에 args를 보유하고 수신하게하는 다른 방법이 있다면? –