从Xcode按钮运行Shell脚本

时间:2017-11-02 19:28:08

标签: swift xcode bash macos shell

我试图在Xcode中获取一个按钮来运行一个单击的shell脚本。

这有效

@IBAction func test(_ sender: NSButton) {
        let path = "/usr/bin/say"
        let arguments = ["hello world"]     
        sender.isEnabled = false
        let task = Process.launchedProcess(launchPath: path, arguments: arguments)
        task.waitUntilExit()
        sender.isEnabled = true
    }

但是当我尝试这个时,它无法从桌面运行脚本

@IBAction func test(_ sender: NSButton) {
     let path = "/bin/bash"
     let arguments = ["~/Desktop/test.sh"]      
     sender.isEnabled = false
     let task = Process.launchedProcess(launchPath: path, arguments: arguments)
     task.waitUntilExit()     
     sender.isEnabled = true
 }

我在Xcode中得到了这个错误输出

/bin/bash: ~/Desktop/test.sh: No such file or directory

如果有人可以帮助我提供一些很好的帮助或示例。谢谢。

2 个答案:

答案 0 :(得分:1)

关闭Xcode沙盒模式,它将解决问题

答案 1 :(得分:1)

  func shell(_ args: String) -> String {
    var outstr = ""
    let task = Process()
    task.launchPath = "/bin/sh"
    task.arguments = ["-c", args]
    let pipe = Pipe()
    task.standardOutput = pipe
    task.launch()
    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    if let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue) {
        outstr = output as String
    }
    task.waitUntilExit()
    return outstr
}

此函数返回您要运行的Bash脚本的输出

 let cmd = "for i in $(ifconfig -lu); do if ifconfig $i | grep -q \"status: active\" ; then echo $i; fi; done"

上面的代码演示了如何使用它。