我不知道为什么这个方法返回一个空白字符串:
- (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),以便 NSTask 可以看到正确的环境($PATH)。