NSProcessInfo返回与“echo $ PATH”不同的PATH

时间:2013-09-26 20:45:25

标签: macos cocoa environment-variables

我试图以编程方式确定系统PATH中是否存在特定的二进制文件。为了获得环境,我使用了两者

NSString* path = [[[NSProcessInfo processInfo] environment] objectForKey:@"PATH"];

NSString* path2 = [NSString stringWithUTF8String: getenv("PATH")];

两者都产生相同的结果,在两种情况下都与控制台中的echo $PATH不同。 path path2 都不包含通过 /etc/paths.d 设置的路径,因此问题是如何将环境PATH作为以编程方式从控制台返回?

1 个答案:

答案 0 :(得分:1)

NSProcessInfo将只访问有关当前进程的信息。例如下面我在cocoa中执行相同的echo $ PATH命令,并获得NSProcessInfo正在显示的相同输出。所以在执行相同命令的终端中。你将得到不同的输出。因为它显示了终端当前进程的路径。如果要查看两者的相同输出,可以在终端 launchctl getenv PATH 中执行此命令,这将等同于[[[NSProcessInfo processInfo]环境] objectForKey:@“PATH”];

NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/bin/bash"];
[task setArguments:[NSArray arrayWithObjects: @"-c", @"echo $PATH",nil]];
NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];

NSFileHandle *file;
file = [pipe fileHandleForReading];

[task launch];

NSData *data;
data = [file readDataToEndOfFile];
NSString *response = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog(@"%@",response);
相关问题