为什么使用AppleScript库会导致do shell script语句无法正常运行?
问题原因
你遇到的编译错误由AppleScript术语命名空间冲突导致:你导入的AppleScript stdlib的text脚本库中定义了同名的do处理器,覆盖了系统原生do shell script对应的do关键字定义,编译器将do识别为库的自定义函数后,后续的shell不符合该函数的参数要求,因此抛出“期望找到行尾”的错误。
解决方案
以下三种方案均不需要将全部代码包裹在tell语句中:
- 方案1:对原生命令显式指定所属应用
所有调用系统原生命令(如do shell script)的位置,增加current application限定,强制调用系统原生实现:use script "text" -- 调用text库的函数可正常编写 -- 调用原生命令时增加限定即可 tell current application to do shell script "echo hello" - 方案2:导入库时仅指定需要的处理器
全局导入库时明确列出你实际要用到的text库函数名,避免导入冲突的do处理器,假设你用到的是trim和split两个函数,写法如下:use script "text" importing {"trim", "split"} -- 此处trim、split可以正常调用 -- do shell script不会被覆盖,可直接使用 do shell script "echo hello" - 方案3:仅在调用库函数时临时指定库,不做全局导入
去掉全局的use script "text"语句,需要调用库函数的位置单独指定目标脚本库,完全避免全局命名空间污染:-- 调用text库函数的写法示例 tell script "text" to set trimmedStr to trim(" test string ") -- 原生命令不受任何影响 do shell script "echo hello"
内容的提问来源于stack exchange,提问作者gurkensaas
相关产品推荐
相关产品推荐

