【问题标题】:Run Shell Script from Xcode button从 Xcode 按钮运行 Shell 脚本
【发布时间】:2018-04-15 10:38:48
【问题描述】:

我正在尝试在 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

如果有人可以帮助我提供一些帮助或示例,那就太好了。谢谢。

【问题讨论】:

  • 也许它无法将~ 处理为主目录。尝试完整的绝对路径
  • 你好。我试过并得到了这个 /bin/bash: /Users/atejada/Desktop/test.sh: Operation not allowed
  • 好的,所以它通过了第一个问题。不熟悉XCode。检查该文件的权限。您是否以自己的身份运行此流程?
  • 太棒了。是的我自己。该脚本是可执行的。我可以通过终端运行它
  • 不知道该怎么办。我会用最新的错误消息更新您的问题,因为它现在是一个不同的问题

标签: swift xcode bash macos shell


【解决方案1】:

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

【讨论】:

  • 谢谢。对于任何有这个问题的人。转到目标的构建设置。确保您选择了“全部”而不是“基本”在搜索框中键入“权利”。结果是构建设置,您可以在其中指定权利文件的位置。
【解决方案2】:
  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"

以上代码演示如何使用。

【讨论】:

    猜你喜欢
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多