Mik*_*ter 4 macos applescript objective-c javascript-automation
根据Apple的Developer Docs,Library
全局允许导入已编译的脚本,以便它们可以在一个当前脚本中用作库.这个工作,如果你是做类似下面的代码就好了myLibName.scpt
位于~/Library/Script Libraries
:
myLib = Library('myLibName');
myLib.myLibMethod() // Works just fine
Run Code Online (Sandbox Code Playgroud)
但是,文档还声称可以导出一个环境变量 - OSA_LIBRARY_PATH
包含一串:
分隔的路径 - Library()
然后在继续它的默认路径之前推迟到该路径列表:~/Library/Script Libraries
.雅知道,就像bash环境变量一样Path
.以下是相关的文档; 它描述了路径层次结构:
脚本作为脚本库的基本要求是它的位置:它必须是以下文件夹之一中"脚本库"文件夹中的脚本文档.搜索库时,将按列出的顺序搜索位置,并使用第一个匹配的脚本:
- 如果引用该库的脚本是一个bundle,则该脚本的bundle资源目录.这意味着脚本可以与他们使用的库打包和分发.
- 如果运行脚本的应用程序是一个bundle,那么应用程序的bundle资源目录.这意味着脚本应用程序("applet"和"drops")可以与它们使用的库打包和分发.它还使运行脚本的应用程序能够提供这些脚本使用的库.
- 环境变量OSA_LIBRARY_PATH中指定的任何文件夹.这允许使用库而无需在其中一个常用位置安装它.此变量的值是以冒号分隔的路径列表,例如/ opt/local/Script Libraries:/ usr/local/Script Libraries.与其他库位置不同,OSA_LIBRARY_PATH中指定的路径完全按原样使用,不附加"脚本库".在OS X v10.11及更高版本中受支持.
- 用户主目录中的Library文件夹,〜/ Library.这是安装库供单个用户使用的位置,是库开发期间的推荐位置.
- 计算机库文件夹,/ Library.此处的库可供计算机的所有用户使用.
- 网络库文件夹,/ Network/Library.位于此处的库可用于网络上的多台计算机.
- 系统库文件夹,/ System/Library.这些是OS X提供的库.
- 应用程序的bundle库目录中的任何已安装的应用程序包.这允许分发与应用程序关联的库,或创建仅用于分发库的应用程序.在OS X v10.11及更高版本中受支持.
问题是它不起作用.我已经尝试OSA_LIBRARY_PATH
通过我的.zshrc
文件导出变量 - 全局- 然后通过脚本编辑器和osascript
可执行文件运行上面的示例脚本.什么都行不通; 我收到"找不到文件"错误.我找到了这个帖子 - 参与者放弃了在线的希望 ; 它没有解释太多.有什么想法吗?
在一个有点相关的说明中,Scripting Additions套件提供了另外两种方法 - loadScript
而且storeScript
- 看起来它们在这里可能很有用.不幸的是,当你尝试使用它们时,osascript
会给你一个手指.虽然,我确实设法使用编译脚本返回看起来像十六进制缓冲区的内容loadScript
.无论如何,你们可以对此有任何见解将非常感激.谢谢.
在OSA_LIBRARY_PATH
启用系统完整性保护的情况下运行时,受限制的可执行文件会忽略环境变量.
要解决此限制,您可以关闭SIP,也可以使用不受限制的可执行文件.
例如,要使其osascript
不受限制,您应首先制作副本,然后使用临时签名重新签名:
cp /usr/bin/osascript ./osascript
codesign -f -s - ./osascript
Run Code Online (Sandbox Code Playgroud)
一旦你有了不受限制的osascript
,就可以使用如下设置的OSA_LIBRARY_PATH环境变量来运行它:
OSA_LIBRARY_PATH="/path/to/libs" ./osascript path/to/script.scpt
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
352 次 |
最近记录: |