我需要在Cocoa应用程序中找到diskutil的路径。在终端中,如果我键入'which diskutil',它会给我:'/ usr / sbin / diskutil /'。它会永远是这条路吗?如果没有,我如何以编程方式找到路径,因为我需要将它与NSTask一起使用
由于
答案 0 :(得分:0)
试试/usr/sbin/diskutil
。如果未找到,请获取$ PATH中的路径列表:
[[[NSProcessInfo processInfo] environment] objectForKey:@"PATH"]
并使用NSFileManager在每个命令上查找命令diskutil
。如果用户有权访问,您的应用程序将找到它。
一个不寻常的情况是该命令不在默认系统位置,并且用户与他的PATH混乱。然后你可以在某些位置硬编码(/ opt / local / bin,/ usr / local / bin,...)或询问用户它在哪里。
答案 1 :(得分:0)
您可以让env
命令为您完成工作。只需说“env diskutil blah blah blah
”,env
将在用户diskutil
的目录中查找PATH
,如果找到它,则使用其余参数运行它。< / p>
对于NSTask,这意味着您需要将任务的启动路径设置为/usr/bin/env
,并将其参数数组设置为命令(diskutil
)及其参数;例如,[NSArray arrayWithObjects:@"diskutil", @"list", @"-plist", nil]
。
当你运行这样一个任务时,它将运行env
,而exec
diskutil
依次运行,所以你将间接运行diskutil
env
1}}程序找到而无需自己找到diskutil
。
您可能想要使用PRHTask,这是我编写的NSTask的替代品,可以自动执行此操作以及其他一些操作。使用PRHTask,您可以在一行中创建diskutil
任务:[PRHTask taskWithProgramName:@"diskutil" arguments:@"list", @"-plist", nil]
。 (当然,你仍然需要运行它;在你做之前还有其他一些很好的功能,详见维基页面。)