繁体   English   中英

从 Swift/MacOS 运行 shell 脚本

[英]Running a shell script from Swift/MacOS

过去我可以使用这个函数成功运行 shell 脚本:

typealias runShellClosure = (_ jsonString:String) -> Void

func runShell(_ command: String, completion: runShellClosure) {
        let task = Process()
        task.launchPath = "/bin/zsh"
        task.arguments = ["-c", command]

        let pipe = Pipe()
        task.standardOutput = pipe
        task.launch()

        let data = pipe.fileHandleForReading.readDataToEndOfFile()
        let output: String = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String

        completion(output)
    }

今天我安装了 YQ(使用 Homebrew) - YQ 将 YAML 文件转换为 JSON。

在终端中进行测试:

yq r -j ~/Desktop/xxxxxxx/swagger/yml/up-api.yaml

并收到了预期的结果。 在我的应用程序中,我将相同的命令传递给 runShell 函数:

我收到command not found错误。

不知道我做错了什么。 我刚刚切换到 Catalina,但将 shell 切换回 Bash 会返回相同的结果。

谢谢

编辑:我可以运行这个命令:

ls ~/Desktop/Xandr/swagger/yml/

并得到预期的结果。 此外,沙盒也被禁用。

解决方案 1

编辑方案 > 参数 > 环境变量:添加PATH并将其值设置为${PATH}

解决方案 2

通过使用此选项(编辑方案>运行>选项)启动命令行工具目标,我能够执行自制软件包可执行文件:

截屏

这个解决方案的唯一缺点是,从我的经验来看,从终端运行它是非常错误的。 每次启动它时它都会添加一个新的终端窗口,如果您已经打开了它,它就不起作用..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM