根据 Apple's Developer Docs Library
全局允许导入已编译的脚本,因此它们可以用作当前脚本中的库。如果您要使用位于 myLibName.scpt
的 ~/Library/Script Libraries
执行类似以下代码的操作,这将很好用:
myLib = Library('myLibName');
myLib.myLibMethod() // Works just fine
但是,文档还声称可以导出一个环境变量 -
OSA_LIBRARY_PATH
包含一串 :
分隔路径 - 然后 Library()
将遵循该路径列表,然后再继续其默认路径: ~/Library/Script Libraries
。你知道,比如 bash 环境变量 Path
。这是下面的相关文档;它描述了路径层次结构:问题是它不起作用。我已经尝试导出
OSA_LIBRARY_PATH
变量——通过我的 .zshrc
文件全局导出——然后通过脚本编辑器和 osascript
可执行文件运行一个与上面类似的示例脚本。没有任何效果;我收到“找不到文件”错误。我在网上找到了这个 thread-where-the-participants-give-up-hope;它没有解释太多。有什么想法吗?有一点相关, Scripting Additions 套件提供了另外两种方法——
loadScript
和 storeScript
——它们似乎在这里很有用。不幸的是,当您尝试使用它们时,osascript
会为您提供帮助。不过,我确实设法使用 loadScript
从编译脚本中返回了看起来像十六进制缓冲区的内容。无论如何,你们可以对此提出任何见解,我们将不胜感激。谢谢。 最佳答案
在启用系统完整性保护的情况下运行时,受限制的可执行文件会忽略 OSA_LIBRARY_PATH
环境变量。
要解决此限制,您可以 turn off SIP ,也可以使用不受限制的可执行文件。
例如,要使 osascript
不受限制,您应该首先制作一个副本,然后使用临时签名重新签名:
cp /usr/bin/osascript ./osascript
codesign -f -s - ./osascript
获得不受限制的
osascript
后,您可以使用 OSA_LIBRARY_PATH 环境变量集运行它,如下所示:OSA_LIBRARY_PATH="/path/to/libs" ./osascript path/to/script.scpt
关于objective-c - 为什么 OSA_LIBRARY_PATH 不能按照 JXA 的文档工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35389058/