NSTask使用默认值和killall bash命令

时间:2014-10-28 02:56:54

标签: bash swift terminal nstask

我正在尝试在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()

运行代码时没有错误。但单击按钮时实际上没有任何反应。有什么建议吗?

1 个答案:

答案 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()