0

私は次のようなコードを持っています、それは大丈夫です、しかし私はそれについて2つの質問があります。

1)@ "ls --l"などの不正なパラをshに割り当てると、 outStringはnullになります。つまり、「ls:-:そのようなファイルまたはディレクトリはありませんls:l:そのようなファイルまたはディレクトリはありません」というエラー警告をキャプチャできません。どうすれば対処できますか?

2)この関数を実装するにはどうすればよいですか:アプリの現在のディレクトリが"/ user / Doc"で、sh = @ "cd /"を実行した後、sh = @ "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);
}
4

1 に答える 1

3
  1. その文字列は標準エラーであり、標準出力ではありません。エラーストリームをチェックしないので、あなたはそれを見つけることができません。

  2. それはサブシェルがどのように機能するかではありません。多くの情報のための「なぜcdはシェルビルトインであるか」のためのグーグル。

于 2012-05-16T15:25:36.730 に答える