【发布时间】:2019-03-04 19:57:05
【问题描述】:
我正在开发一项功能,以启用将由 Mac 应用程序执行的用户提供的脚本。
NSUserScriptTask 是脚本调用代码的基础,NSUserAppleScriptTask 和 NSUserAutomatorTask 子类都允许设置变量以将信息从 Swift 传递到脚本:
Passing variables to an AppleScript
Setting NSUserAutomatorTask variables without requiring Automator Workflows to declare that variable
剩下的NSUserUnixTask 不支持设置变量。相反,它支持称为arguments 的[String] 数组。
执行脚本时,我想从 Mac 应用程序传递 3 个变量:
let folderURL: String? = "/files/"
let fileURLs: [String] = ["/files/file1", "/files/file2"]
let selectionType: Int? = 1
let arguments: [String] = ["how", "should", "arguments", "be", "formatted", "?"]
let unixScript = try! NSUserUnixTask(url: url)
unixScript.execute(withArguments: arguments) { (error) in
if let error = error {
print(error)
}
}
这 3 个 swift 变量必须压缩成一个 [String] 数组,以便 NSUserUnixTask 用作其 arguments 参数。
当脚本运行时,我想以原型方式为脚本作者提供对相同参数的访问权限:
#! /bin/bash
say "How should the script then access/parse the arguments?"
say $@ #says the arguments
基于脚本作者的易用性,Swift 代码应该如何将其信息格式化为参数[String]?
可以提供哪些样板代码以允许从脚本中轻松实用地访问参数?
【问题讨论】:
-
@Inian 我将提供开发人员启动脚本所需的参数,并从 Swift 代码中传递所需的参数。我需要以对脚本开发人员有用的方式格式化所述参数+任何标志等。我不确定这种格式应该是什么样子。这就是 bash 脚本标记在这里的关系。如果您有任何建议,希望得到您的推荐。
-
您能否也为此类参数和标志添加一些实际值,并让您知道您希望
bash如何解析它们。这些信息有点太模糊,无法提供有意义的答案。我真的可以帮助更多这样的例子 -
@Inian 这确实是我要问的问题:我不知道我应该提供哪些标志或应该如何构造或解析参数。我有问题中所示的 Swift 参数。我想以惯用的格式向脚本开发人员提供这些参数。
-
当您的意思是对脚本开发人员,那么来自 swift 代码的参数将由
bash脚本处理?你有没有以一些的方式让它传递给这个bash脚本?如果不是,您可以尝试以某种方式显示它是如何在bash脚本中接收到的吗? -
如果您能告知一些不正确的方式当前将参数传递给
bash脚本,我可以提供改进或建议
标签: swift bash macos shell scripting