【发布时间】:2014-04-12 21:36:39
【问题描述】:
我正在为我的一个可可应用程序编写命令行助手。这个帮助工具应该使用NSTask 执行一个shell ( /bin/sh ) 实例。众所周知,可以利用-c 执行sh,您可以传递一个或多个命令作为要执行的参数。
例如运行/bin/sh -c "networksetup -setwebproxystate Wi-Fi on"
执行networksetup -setwebproxystate Wi-Fi on。
现在,问题来了:
当我将启动路径设置为sh([task setLaunchPath:@"/bin/sh"]),然后设置参数如下:
cmd = "-c,\\\"networksetup\\_-setwebproxystate\\_Wi-Fi\\_on\\\"";
stringArguments = [NSMutableString stringWithFormat:@"%s", cmd.c_str()];
stringArguments = [[stringArguments stringByReplacingOccurrencesOfString:@"_" withString:@" "] mutableCopy];
arguments = [stringArguments componentsSeparatedByString:@","];
[task setArguments:arguments];
我看到 -c 参数以某种方式被跳过,因为我收到以下错误:
/bin/sh: "networksetup -setwebproxystate Wi-Fi on": command not found
那是因为"networksetup -setwebproxystate Wi-Fi on" 是直接执行的,而不是sh -c 之后的参数。
我知道我无法以最清晰的方式解释,但希望我能表达我的意思。
我尝试了几乎所有想到的东西,但我被困住了。任何建议都非常感谢。
【问题讨论】:
标签: cocoa shell unix arguments nstask