从.command运行NSTask

时间:2014-12-17 04:40:13

标签: objective-c nstask

对不起,英语不是我的第一语言,我的语法能力很差。

嗨,我是Objective-C的新手,我在使用NSTask方面遇到了一些问题。我有一个.command文件,我想在这个cocoa应用程序中执行,但如果我使用" open"命令使用NSTask来执行文件,它启动终端。有没有办法在不启动它的情况下执行它,就像典型的NSTask一样?或者我可以只使用要执行的命令的文本文件?谢谢。

这是我的代码......

NSString *pathtorb = [[NSBundle mainBundle] pathForResource:@"rightSpace" ofType:@"command"];

NSTask *DfileBlankSpace = [[NSTask alloc]init];
DfileBlankSpace.launchPath = @"/usr/bin/open";
DfileBlankSpace.arguments = @[pathtorb];
[DfileBlankSpace launch];
[DfileBlankSpace waitUntilExit];

NSTask *killDock = [[NSTask alloc]init];
killDock.launchPath = @"/usr/bin/killall";
killDock.arguments = @[@"Dock"];
[killDock launch];
[killDock waitUntilExit];

1 个答案:

答案 0 :(得分:0)

.command只是一个shell脚本,而不是使用open - 它将这些文件与终端关联 - 运行sh传递它-c并将文件路径名作为参数:

DfileBlankSpace.launchPath = @"/bin/sh";
DfileBlankSpace.arguments = @[@"-c", pathtorb];

HTH

<强>附录

正如评论中指出的@KenThomases,如果您没有转义pathorb使其成为有效的bash路径名,那么您应该省略@"-c"参数。这样就可以从文件中读取shell而无需解析其文件名,就好像在命令行中输入一样。