如何使用 Interface Builder 从 Swift 3 (Xcode 8) 运行 shell 命令?
How do I run shell commands from Swift 3 (Xcode 8) using Interface Builder?
第一次使用 Xcode,通常我坚持使用 AppleScript 来处理简单的应用程序,但我希望扩展并使用 GUI。
我希望能够在 Xcode 8 中执行来自 Swift (3) 的系统 "zip" 命令,并在按下按钮时使用一些参数。
当 运行 产生以下错误时,我在下面的代码:
zip 错误:无事可做! ( -r -j ~/Desktop/SystemLogs/iLog.zip ~/Library/Logs/iLog -x *.DS_Store)
我尝试从 swift 运行 这个 shell 命令做错了什么?感谢任何帮助。
@IBAction func gButton(_ sender: NSButtonCell) {
let zip1 = Process()
zip1.launchPath = "/usr/bin/zip"
zip1.arguments = [" -r -j ~/Desktop/SystemLogs/Logs.zip ~/Library/Logs -x *.DS_Store"]
zip1.launch()
sender.isEnabled = false
zip1.waitUntilExit()
sender.isEnabled = true
}
您正在尝试将 shell 命令行传递给 zip。 shell 的工作是将命令行分解为单独的参数、处理路径名扩展、设置 I/O 重定向等。实际调用的命令(在您的情况下为 zip)通过一个shell 完成其工作后的单个参数数组,设置任何 I/O 重定向等
你要么需要传递一个单独参数的数组,例如@[ @"-r", @"-j", ... ]
并自己处理路径名扩展 或 您可以改为调用 shell 本身并让它为您完成所有工作。查找您希望使用的 shell(bash、tcsh 等)的手册页,您会发现它有一个选项,可能是 -c
,它需要一个完整的命令行作为单个参数并解析并执行它。
HTH
第一次使用 Xcode,通常我坚持使用 AppleScript 来处理简单的应用程序,但我希望扩展并使用 GUI。
我希望能够在 Xcode 8 中执行来自 Swift (3) 的系统 "zip" 命令,并在按下按钮时使用一些参数。
当 运行 产生以下错误时,我在下面的代码:
zip 错误:无事可做! ( -r -j ~/Desktop/SystemLogs/iLog.zip ~/Library/Logs/iLog -x *.DS_Store)
我尝试从 swift 运行 这个 shell 命令做错了什么?感谢任何帮助。
@IBAction func gButton(_ sender: NSButtonCell) {
let zip1 = Process()
zip1.launchPath = "/usr/bin/zip"
zip1.arguments = [" -r -j ~/Desktop/SystemLogs/Logs.zip ~/Library/Logs -x *.DS_Store"]
zip1.launch()
sender.isEnabled = false
zip1.waitUntilExit()
sender.isEnabled = true
}
您正在尝试将 shell 命令行传递给 zip。 shell 的工作是将命令行分解为单独的参数、处理路径名扩展、设置 I/O 重定向等。实际调用的命令(在您的情况下为 zip)通过一个shell 完成其工作后的单个参数数组,设置任何 I/O 重定向等
你要么需要传递一个单独参数的数组,例如@[ @"-r", @"-j", ... ]
并自己处理路径名扩展 或 您可以改为调用 shell 本身并让它为您完成所有工作。查找您希望使用的 shell(bash、tcsh 等)的手册页,您会发现它有一个选项,可能是 -c
,它需要一个完整的命令行作为单个参数并解析并执行它。
HTH