Swift3 如何使用Interface Builder从Swift 3(Xcode 8)运行shell命令?

Swift3 如何使用Interface Builder从Swift 3(Xcode 8)运行shell命令?,swift3,applescript,xcode8,Swift3,Applescript,Xcode8,第一次使用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 gBu

第一次使用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

扩展是您正在使用的shell的一个属性(例如,
bash
),
zip
不知道如何处理它,从代码中拖动该部分“-x*.DS_存储”,它仍然会产生错误zip错误:无事可做!(-r-j~/Desktop/SystemLogs/iLog.zip~/Library/Logs/iLog)同样的事情也适用于
~
。谢谢!!bash-c选项工作得非常好!