为什么OSA_LIBRARY_PATH不能像JXA那样工作?

问题描述 投票:3回答:2

根据Apple's Developer DocsLibrary全局允许导入已编译的脚本,以便它们可以在一个当前脚本中用作库。如果您使用位于myLibName.scpt~/Library/Script Libraries执行类似下面的代码,这可以正常工作:

myLib = Library('myLibName');
myLib.myLibMethod() // Works just fine

但是,文档还声称可以导出一个环境变量 - OSA_LIBRARY_PATH,其中包含一串:分隔的路径 - 然后Library()将推迟到该路径列表,然后继续执行它的默认路径:~/Library/Script Libraries。雅知道,像bash环境变量Path。以下是相关的文档;它描述了路径层次结构:

脚本作为脚本库的基本要求是它的位置:它必须是以下文件夹之一中“脚本库”文件夹中的脚本文档。搜索库时,将按列出的顺序搜索位置,并使用第一个匹配的脚本:

  1. 如果引用该库的脚本是一个bundle,则该脚本的bundle资源目录。这意味着脚本可以与他们使用的库打包和分发。
  2. 如果运行脚本的应用程序是一个bundle,那么应用程序的bundle资源目录。这意味着脚本应用程序(“applet”和“drops”)可以与它们使用的库打包和分发。它还使运行脚本的应用程序能够提供这些脚本使用的库。
  3. 环境变量OSA_LIBRARY_PATH中指定的任何文件夹。这允许使用库而无需在其中一个常用位置安装它。此变量的值是以冒号分隔的路径列表,例如/ opt / local / Script Libraries:/ usr / local / Script Libraries。与其他库位置不同,OSA_LIBRARY_PATH中指定的路径完全按原样使用,不附加“脚本库”。在OS X v10.11及更高版本中受支持。
  4. 用户主目录中的Library文件夹,〜/ Library。这是安装库供单个用户使用的位置,是库开发期间的推荐位置。
  5. 计算机库文件夹,/ Library。此处的库可供计算机的所有用户使用。
  6. 网络库文件夹,/ Network / Library。位于此处的库可用于网络上的多台计算机。
  7. 系统库文件夹,/ System / Library。这些是OS X提供的库。
  8. 应用程序的bundle库目录中的任何已安装的应用程序包。这允许分发与应用程序关联的库,或创建仅用于分发库的应用程序。在OS X v10.11及更高版本中受支持。

问题是它不起作用。我尝试通过我的OSA_LIBRARY_PATH文件全局导出.zshrc变量 - 然后通过脚本编辑器和osascript可执行文件运行上面的示例脚本。什么都行不通;我收到“找不到文件”错误。我在网上发现了这个thread-where-the-participants-give-up-hope;它没有解释太多。有什么想法吗?

在一个有点相关的说明中,Scripting Additions套件提供了另外两种方法 - loadScriptstoreScript - 看起来它们在这里可能很有用。不幸的是,当你尝试使用它们时,osascript会给你一个手指。虽然,我确实设法使用loadScript从编译的脚本返回看起来像十六进制缓冲区的内容。无论如何,你们可以对此有任何见解将非常感激。谢谢。

objective-c macos applescript javascript-automation jxa
2个回答
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

0
投票

作为一个糟糕的替代方案,您可以将一个符号链接放在osascript将要查看的“脚本库”文件夹之一并将其指向您想要的文件夹。请注意,符号链接必须是整个文件夹的替代品,它不能只存在于其中。

rm -rf ~/Library/Script\ Libraries
ln -s "/Your/Custom/Path/Goes/Here/" ~/Library/Script\ Libraries

测试10.13.2

© www.soinside.com 2019 - 2024. All rights reserved.