2017-06-05 78 views
0

第一次使用Xcode时,通常我会坚持使用AppleScript以获得简单的应用程序,但我期望分支并使用GUI。如何使用Interface Builder从Swift 3(Xcode 8)运行shell命令?

我希望能够从Xcode 8中的Swift(3)中执行系统“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 
} 
+0

的''扩张是你使用(例如'bash')外壳的特性,'zip'不知道做什么用它 – Alexander

+0

试图拉那部分“-x * .DS_Store“,它仍然会产生错误zip错误:无事可做! (-r -j〜/ Desktop/SystemLogs/iLog.zip〜/ Library/Logs/iLog) – jefenater

+0

同样的事情适用于'〜'。 – Alexander

回答

0

您正尝试将shell命令行传递给zip。 shell的工作是将命令行分解为单独的参数,处理路径名扩展,设置I/O重定向等,等等。在你的情况下调用的实际命令zip是在shell之后传递一个单独参数的数组已完成其任务,设置任何I/O重定向等。

要么需要传递单个参数的数组,例如@[ @"-r", @"-j", ... ]并自己处理路径名扩展您可以调用shell本身并让它为您工作。查看你希望使用的shell的手册页(bash,tcsh等),你会发现它有一个选项,可能是-c,它将一个完整的命令行作为单个参数并解析并执行它。

HTH

+0

CRD谢谢! bash -c选项完美运行! – jefenater