带有默认值和killall-bash命令的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()

运行代码时没有出现任何错误。但当点击按钮时,实际上什么也没发生。有什么建议吗?

您确定没有发生吗?您不能像那样将多个-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()

最新更新