我不知道为什么这个方法返回一个空字符串:
- (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或用户的shell(如〜/ .bashrc)中,以便正确的环境($ PATH)由NSTask看到。