找到diskutil的路径

时间:2011-11-17 09:23:05

标签: objective-c macos cocoa

我需要在Cocoa应用程序中找到diskutil的路径。在终端中,如果我键入'which diskutil',它会给我:'/ usr / sbin / diskutil /'。它会永远是这条路吗?如果没有,我如何以编程方式找到路径,因为我需要将它与NSTask一起使用

由于

2 个答案:

答案 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]。 (当然,你仍然需要运行它;在你做之前还有其他一些很好的功能,详见维基页面。)