对不起,英语不是我的第一语言,我的语法能力很差。
嗨,我是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];
答案 0 :(得分:0)
.command
只是一个shell脚本,而不是使用open
- 它将这些文件与终端关联 - 运行sh
传递它-c
并将文件路径名作为参数:
DfileBlankSpace.launchPath = @"/bin/sh";
DfileBlankSpace.arguments = @[@"-c", pathtorb];
HTH
<强>附录强>
正如评论中指出的@KenThomases,如果您没有转义pathorb
使其成为有效的bash
路径名,那么您应该省略@"-c"
参数。这样就可以从文件中读取shell而无需解析其文件名,就好像在命令行中输入一样。