1

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

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

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

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

4

1 回答 1

1

NSProcessInfo 将只访问有关当前进程的信息。例如,下面我在 cocoa 中执行相同的 echo $PATH 命令,并得到与 NSProcessInfo 显示的相同的输出。所以在终端中执行相同的命令时。你会得到不同的输出。因为它显示了终端中当前进程的路径。如果你想看到两者相同的输出,你可以在终端中执行这个命令launchctl getenv PATH相当于 [[[NSProcessInfo processInfo] environment] 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);
于 2013-09-27T12:08:17.663 回答