我正在编写OS X应用程序,它需要异步运行不同线程中的大量shell脚本,并且每个脚本都需要以root用户身份运行,因此我找到了一个常见问题的唯一完整解决方案(使用AppleScript)完全不适合我。此刻,我正在运行它们:
func runCommand(command cmd : String) -> String {
var result = ""
let task = NSTask()
task.launchPath = "/bin/bash"
task.arguments = (["-c", cmd])
task.currentDirectoryPath = "~/"
let pipe = NSPipe()
task.standardOutput = pipe
task.standardError = pipe
let handle = pipe.fileHandleForReading
task.launch()
let data = NSMutableData()
while task.running {
data.appendData(handle.availableData)
}
result = String(data: data, encoding: NSUTF8StringEncoding)!
if !result.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet()).isEmpty {
print("Output for \(cmd) : \(result)")
}
return result
}
该命令看起来像"\(askpass) sudo -Ak true"
,其中askpass
是包含密码的文件,这是一个很大的安全漏洞。所以,问题是:如何让Swift OS X应用程序以root身份运行?