最近,我在一个一直想完成的项目上遇到了麻烦。使用 Automator,但我不知道如何完成这个项目。有一个叫做 Brackets 的脚本编辑应用程序,我想让它在每次打开应用程序时执行名为 tty.js 的 shell 命令。任何能给我的帮助都会很棒
答案1
您可以尝试进入应用程序的 .app 文件夹并重命名二进制文件,创建一个脚本文件(标记为可执行文件),该文件命名为以前的可执行文件,它将包含对现在重命名的可执行文件的引用以及您正在编写的脚本。例如
cd /Applications/Brackets.app/Contents/MacOS
mv Brackets BracketsReal
echo "tty.js" > Brackets
echo "BracketsReal &" >> Brackets
chmod +x Brackets
这应该创建一个文本脚本,然后启动你的脚本和应用程序......
编辑
Appname.app/Contents/MacOS/
支持文件夹中的脚本。
第一行#!/bin/sh
(又名shebang
)是必须的
移动真实可执行文件并使其从脚本执行的技术被称为wrapping
Gimp 或 XQuartz(Xorg/X11)等应用程序,并且也被使用在 MacOS 上。
如果我正确理解了用户想要实现的目标,运行Bracket并自动打开文件tty.js
,除了缺失之外shebang
,还需要考虑其他一些因素。
为了正确包装 BracketsReal,Brackets 应该是这样的:
#!/bin/sh
exec "$(dirname "$0")/BracketsReal"
这应该像我们从未将 Brackets 移动到 BracketsReal 一样运行。
exec
是 shell 的内置命令
$0
是系统传递给执行的 shell 脚本的一个特殊参数,当使用点击应该是脚本的完整路径:
/Applications/Brackets.app/Contents/MacOS/Brackets
dirname
是一个shell命令,只获取目录部分而不获取文件名,$( )
是一个命令替换,一旦执行,该行将变成:
exec /Applications/Brackets.app/Contents/MacOS/BracketsReal
因此,我们可以将应用程序从/Applications
其他文件夹移出,并且仍然可以运行它。
此时我们应该检查BracketsReal
(可能是脚本本身)是否接受在命令行上作为参数打开的文件(并且最终是否需要一些特殊的语法)如果它确实接受参数那么该行将变成如下内容:
exec "$(dirname "$0")/BracketsReal" "/path/to/the/file/tty.js"
最后要注意的是,要检查包装器脚本是否有问题,只需打开终端并运行包装器,在终端提示符下只需输入/粘贴:
/Applications/Brackets.app/Contents/MacOS/Brackets
权限或语法错误将打印在终端窗口中。