使用JavaScript调用Shell脚本以实现自动化
使用AppleScript,我可以使用以下命令调用shell脚本:使用JavaScript调用Shell脚本以实现自动化,javascript,applescript,javascript-automation,Javascript,Applescript,Javascript Automation,使用AppleScript,我可以使用以下命令调用shell脚本: do shell script "echo 'Foo & Bar'" 但是我在约塞米蒂脚本编辑器中找不到一种用JavaScript实现这一点的方法。do shell Script是标准脚本添加的一部分,因此类似这样的东西应该可以工作: app = Application.currentApplication() app.includeStandardAdditions = true app.doShellScript(
do shell script "echo 'Foo & Bar'"
但是我在约塞米蒂脚本编辑器中找不到一种用JavaScript实现这一点的方法。
do shell Script
是标准脚本添加的一部分,因此类似这样的东西应该可以工作:
app = Application.currentApplication()
app.includeStandardAdditions = true
app.doShellScript("echo 'Foo & Bar'")
补充:
调用shell时,正确引用命令中嵌入的参数非常重要:
为此,AppleScript提供了的引号形式,以便在shell命令中安全地使用变量值作为参数,而不必担心shell更改值或完全破坏命令
奇怪的是,从OSX 10.11开始,似乎没有类似于的引用形式的JXA,但是,很容易实现自己的(另一个答案和随后的更正):
//这是与AppleScript的`引用的`
函数quotedForm{return“'”+s.replace(/'/g,“\\'”)+“'}
据我所知,这正是AppleScript的引用形式的
所做的
它用单引号将参数括起来,这样可以保护它不受shell扩展的影响;由于单引号shell字符串不支持转义嵌入的单引号,因此带有单引号的输入字符串被分解为多个单引号子字符串,其中嵌入的单引号通过\'
拼接在一起,然后shell将其重新组合成单个文本
示例:
var-app=Application.currentApplication();app.includeStandardAdditions=真
函数quotedForm{return“'”+s.replace(/'/g,“\\'”)+“'}
//使用空格、单引号和其他shell元字符构造值
//(必须按字面意思引用的内容)。
var arg=“我是一个需要引用的值-|&;()”
//由于quotedForm(),这应该回显未修改的arg;
//它相当于AppleScript`do shell script“echo”&引用arg`:
console.log(app.doShellScript(“echo”+quotedForm(arg)))
或者,如果JXA脚本碰巧加载了自定义AppleScript库,建议
执行以下操作(轻轻编辑):
如果您在JS中使用var lib=library(“lib”)
引用了一个AppleScript库,您可能希望添加
quotedFormOf上的
报税表
结束引用格式
转到此库。
这将使引用表单的AppleScript实现随处可用,如lib.quotedFormOf
也许这对您有所帮助:我建议您研究一下Cocoa的NSTask
,因为它比do shell script
更健壮、更强大。谢谢,@BallpointBen-我已经在答案的底部添加了您的建议,还有一些小的补充。