質問

なぜだかよくわかりませんこのメソッドは空の文字列:

- (NSString *)installedGitLocation {
    NSString *launchPath = @"/usr/bin/which";

    // Set up the task
    NSTask *task = [[NSTask alloc] init];
    [task setLaunchPath:launchPath];
    NSArray *args = [NSArray arrayWithObject:@"git"];
    [task setArguments:args];

    // Set the output pipe.
    NSPipe *outPipe = [[NSPipe alloc] init];
    [task setStandardOutput:outPipe];

    [task launch];

    NSData *data = [[outPipe fileHandleForReading] readDataToEndOfFile];
    NSString *path = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];

    return path;
}

場合の代わりに通過 @"git" しているので、引数として、パス @"which" を取得しま /usr/bin/which として返されます。従って少なくともその原理です。

端末から

$ which which
$ /usr/bin/which
$
$ which git
$ /usr/local/git/bin/git

その作品があります。

しかし、面白いことを考えることができること which な探索を通してすべてのパスが私の環境です。

こうしたなか、動くよ!いいアイデア、浮かぶのでしょうか。

編集: このようになりますが約定のいずれかNSTaskは、ユーザのシェル(例えば、~/.bashrcの正しい環境($PATH)を見ることNSTask.

役に立ちましたか?

解決

実行タスクによNSTask用 fork()exec() 実際に実行します。ユーザのインタラクティブシェルのいない者。以降 $PATH (大人)シェル構想するものではありませんがすいプロセスがその他のファッション。

他のヒント

    [task setLaunchPath:@"/bin/bash"];
    NSArray *args = [NSArray arrayWithObjects:@"-l",
                     @"-c",
                     @"which git",
                     nil];
    [task setArguments: args];

このた私にとって雪豹;まだ試他のシステム。の-l"(小文字でL)かbashに関する法律がって呼び出されたとしてログインシェル"の過程で拾っ$る。このた場合は、打上げ軌道に乗せるための設定/ビット/shでも-。

は/usr/local/git/binお$PATHきはどうすればいいですか?と思い which するだけでなく、ユーザーの$る。

の質問 すぐの場所の実行可能ファイルのココア.という基本問題は同じです。その答えは残念ながらないすっきりがあるのにも便利な情報があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top