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

运行shell脚本objective-c的最简单方法,objective-c,cocoa,system,Objective C,Cocoa,System,我是objective-c新手,想知道如何以objective-c最简单的方式运行shell脚本。我不关心任何输出。我试过system()、exec()和execl()以及一个NSTask。由于某些原因,这些方法不起作用。。。这是我正在尝试运行的shell脚本: "mount_webdav http://idisk.mac.com/idisk_username/ /Volumes/idisk_username" (基本上是安装我的iDisk)。此外,没有显示密码框或任何it工作指示。 它将在a

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

"mount_webdav http://idisk.mac.com/idisk_username/ /Volumes/idisk_username"
(基本上是安装我的iDisk)。此外,没有显示密码框或任何it工作指示。
它将在applescript中工作,我已经创建了挂载点目录。上面所有的方法都不起任何作用,或者由于某种奇怪的原因使应用程序崩溃。

NSTask
将是Cocoa中实现这一点的方法。如果遇到问题,您可能需要再次检查代码,阅读相关文档(同时查看示例代码),并在此处发布有关其用法的具体问题。

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

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


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

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


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

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];

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

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];

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

这是你所问的唯一一个SO问题的完全相同的问题。您在另一个问题中发布的代码已被破坏。它没有正确设置参数。答案仍然是“使用NSTask”。这个问题实际上是那个问题的翻版。这是你们所问的唯一一个问题的翻版。您在另一个问题中发布的代码已被破坏。它没有正确设置参数。答案仍然是“使用NSTask”。这个问题实际上是那个问题的翻版。