2
我試圖運行以下兩個慶典在Cocoa程序命令:NSTask與違約和killall的bash命令
defaults write com.apple.finder CreateDesktop false
killall Finder
使用NSTask,我有以下的銀行代碼執行命令時,按鈕被點擊:
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」,「command 1; command 2; command 3」]'會運行所有的命令。所以,如果你有很多命令,最好是將所有這些命令放在shell腳本中,然後從應用程序運行該shell腳本? – wigging 2014-10-28 17:24:20
模塊化是好的,但取決於外部腳本增加了另一種複雜性。如果它只是一些命令的序列,那麼現在我會將它們保存在一個硬編碼的字符串中。對於它的價值,換行符也是有效的命令終止符。 – tripleee 2014-10-28 17:53:37
噢,如果這是一種涉及任何特權的情況,那麼五十一個醜陋的小子進程比暴露外殼的攻擊表面要好得多。 – tripleee 2014-10-28 18:14:39