根据Apple's Developer Docs,Library
全局允许导入已编译的脚本,以便它们可以在当前脚本中用作库。如果您使用位于myLibName.scpt
的{{1}}下面的代码执行此操作,则此工作正常:
~/Library/Script Libraries
但是,文档还声称可以导出一个环境变量 - myLib = Library('myLibName');
myLib.myLibMethod() // Works just fine
包含一串OSA_LIBRARY_PATH
分隔的路径 - 而:
会推迟在进入其默认路径之前的路径列表:Library()
。你知道,就像bash环境变量~/Library/Script Libraries
一样。这是以下相关文档;它描述了路径层次结构:
脚本作为脚本的基本要求 library是它的位置:它必须是“脚本”中的脚本文档 库“以下文件夹之一中的文件夹。搜索时 一个库,按列出的顺序搜索位置,然后搜索 使用第一个匹配脚本:
- 如果引用该库的脚本是一个bundle,那么脚本就是 捆绑资源目录。这意味着可以打包脚本 并与他们使用的库一起分发。
- 如果运行脚本的应用程序是捆绑包,则应用程序的捆绑包资源 目录。这意味着脚本应用程序(“applets”和 “液滴”可以与它们的库一起包装和分发 使用。它还允许运行脚本的应用程序提供 这些脚本使用的库。
- 环境变量OSA_LIBRARY_PATH中指定的任何文件夹。这允许使用库 没有安装在一个通常的位置。这个的价值 variable是以冒号分隔的路径列表,例如/ opt / local / Script 库:/ usr / local / Script库。与其他图书馆不同 位置,OSA_LIBRARY_PATH中指定的路径完全按原样使用, 没有附加“脚本库”。在OS X v10.11和。中受支持 稍后。
- 用户主目录中的Library文件夹,〜/ Library。 这是安装库以供单个用户使用的位置, 并且是库开发期间的推荐位置。
- 的 计算机库文件夹,/ Library。这里的图书馆是 适用于所有计算机用户。
- 网络库文件夹, /网络/库。这里的图书馆可供多个图书馆使用 网络上的计算机。
- 系统库文件夹,/ System / Library。 这些是OS X提供的库。
- 任何已安装的应用程序 bundle,在应用程序的bundle库目录中。这允许 分发与应用程序关联的库,或 创建仅用于分发库的应用程序。 在OS X v10.11及更高版本中受支持。
醇>
问题在于它不起作用。我尝试通过我的Path
文件全局导出OSA_LIBRARY_PATH
变量 - 然后通过脚本编辑器和.zshrc
可执行文件运行上面的示例脚本。什么都行不通;我找不到"找不到文件"错误。我在网上找到了thread-where-the-participants-give-up-hope;它没有解释太多。有什么想法吗?
在一个有点相关的说明中,脚本添加套件提供了另外两种方法 - osascript
和loadScript
- 看起来它们在这里可能很有用。不幸的是,当您尝试使用它们时,storeScript
会为您提供帮助。虽然,我确实设法使用osascript
从编译的脚本返回看起来像十六进制缓冲区的内容。无论如何,你们可以对此有任何见解将非常感激。感谢。
答案 0 :(得分:8)
在启用系统完整性保护的情况下运行时,受限制的可执行文件会忽略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
答案 1 :(得分:0)
作为一个糟糕的选择,您可以在其中一个脚本库中添加一个符号链接" osascript将查看的文件夹并将其指向您想要的文件夹。请注意,符号链接必须是整个文件夹的替代品,它不能只存在于其中。
rm -rf ~/Library/Script\ Libraries
ln -s "/Your/Custom/Path/Goes/Here/" ~/Library/Script\ Libraries
在10.13.2上测试