您好我正在尝试使用swift创建一个简单的程序来执行此命令,在Dock中添加一个空格:
defaults write com.apple.dock persistent-apps -array-add '{"tile-type"="spacer-tile";}'; killall Dock
这是我使用的代码:
let task = NSTask()
task.launchPath = "/usr/bin/defaults"
task.arguments = ["write","com.apple.dock","persistent-apps","-array-add","'{\"tile-type\"=\"spacer-tile\";}';","killall Dock"]
let pipe = NSPipe()
task.standardOutput = pipe
task.standardError = pipe
task.launch()
task.waitUntilExit()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = NSString(data: data, encoding: NSUTF8StringEncoding) as! String
print(output)
我没有错,但没有任何反应。有人能帮帮我吗?
答案 0 :(得分:2)
这是对我有用的代码:
let task = NSTask()
task.launchPath = "/usr/bin/defaults"
task.arguments = ["write","com.apple.dock","persistent-apps","-array-add","{\"tile-type\"=\"spacer-tile\";}"]
let pipe = NSPipe()
task.standardOutput = pipe
task.standardError = pipe
task.launch()
task.waitUntilExit()
let task2 = NSTask()
task2.launchPath = "/usr/bin/killall"
task2.arguments = ["Dock"]
let pipe2 = NSPipe()
task2.standardOutput = pipe2
task2.standardError = pipe2
task2.launch()
task2.waitUntilExit()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = NSString(data: data, encoding: NSUTF8StringEncoding) as! String
print(output)
答案 1 :(得分:0)
defaults write ... ; killall Dock
是两个命令。在终端中键入此行时,将传递该行 到你的shell(OS X上通常是“bash”),然后执行shell 两个命令顺序。
另一方面,NSTask
只执行一个命令
没有任何外壳通常会做的魔术。在你的情况下
所有参数,包括最终的“killall Dock”,都被传递为
/usr/bin/defaults
的参数。
一种可能的解决方案是按顺序执行两个 NSTask
,
一个用于defaults
命令,另一个用于killall
命令。