我正在尝试在Cocoa应用程序中运行以下两个bash命令:
defaults write com.apple.finder CreateDesktop false
killall Finder
使用NSTask,我有以下Swift代码在单击按钮时执行命令:
let commands = ["-c", "defaults write com.apple.finder CreateDesktop false",
"-c", "killall Finder"]
let task = NSTask()
task.launchPath = "/bin/bash"
task.arguments = commands
task.launch()
运行代码时没有错误。但单击按钮时实际上没有任何反应。有什么建议吗?
答案 0 :(得分:1)
你确定没有发生吗?你不能像这样将多个-c
参数传递给Bash,但是当我尝试时我会执行第一个命令。
$ bash -c 'echo foo' -c 'echo bar'
foo
在这种特殊情况下,解决方法很简单;
$ bash -c 'echo foo; echo bar'
foo
bar
更一般地说,您传递给Bash的各个命令根本不需要shell。要杀死Finder,
task.launchPath = "/usr/bin/killall"
task.arguments = [ "Finder" ]
但是考虑到你有多个命令,从shell运行它们实际上是有意义的。
let task = NSTask()
task.launchPath = "/bin/bash"
task.arguments = ["-c",
"defaults write com.apple.finder CreateDesktop false; killall Finder"]
task.launch()