运行shell脚本objective-c的最简单方法

时间:2009-11-30 22:23:03

标签: objective-c cocoa system

我是一个客观的新手,我想知道如何以Objective-c最简单的方式运行shell脚本。我不关心任何输出。我尝试过system(),exec()和execl()以及NSTask。这些方法由于某种原因不起作用......这是我试图运行的shell脚本:

"mount_webdav http://idisk.mac.com/idisk_username/ /Volumes/idisk_username"

(基本上安装我的iDisk)。此外,没有密码框或任何工作显示。 它将在applescript中工作,我已经创建了挂载点目录。上面没有任何方法可以做任何事情,或者由于一些奇怪的原因而使应用程序崩溃。

3 个答案:

答案 0 :(得分:2)

如果可以提供帮助,请不要使用shell脚本。在参数化脚本时(例如mount_webdav %@ %@),它们是引入严重错误的好方法。

相反,直接使用NSTask,fork / exec,或者(在Python中)使用子流程模块。您将这三个参数作为数组传递,而不是作为单个字符串传递。

答案 1 :(得分:2)

NSTask提供您需要的一切。这应该有效:

NSArray *args=[NSArray arrayWithObjects:@"http://idisk.mac.com/idisk_username/",@"/Volumes/idisk_username",nil];
NSTask *mountTask=[[NSTask alloc] init];
[mountTask setLaunchPath:@"/sbin/mount_webdav"];
[mountTask launch];

首先从命令行测试所有完整的命令路径和args。我没有使用mount_webdav,但我认为它需要比你提供的更多的args。

答案 2 :(得分:1)

NSTask将是在Cocoa中实现此目的的方法。您可能希望再次查看代码,阅读相关文档(也请查看示例代码),如果遇到问题,请在此处发布有关其用法的具体问题。