我有一个简单的Gruntfile,希望能够从OSX扩展坞中的图标运行。
我创建了一个非常简单的shell脚本(launcher.sh),将其另存为应用程序,以便可以将其添加到我的扩展坞中。当我直接在终端中运行它时,它的效果很好:
#!/usr/bin/env bash
$(grunt serve --open)
此shebang也可以正常工作:
#!/bin/bash
但是,当我从Automator工作流程中调用Shell脚本时,出现以下错误:
launcher.sh: line 2: grunt: command not found
这是我的Automator设置:
我究竟做错了什么?
更新资料
如果将其放在我的
launcher.sh
文件中:#!/bin/bash
`/usr/local/bin/grunt serve --open`
我在Automator中收到另一个错误:
env: node: No such file or directory
但是,像以前一样,如果我直接在Terminal中运行脚本就可以了-所以我认为@ mklement0与
PATH
是正确的更新2
启动器
#!/bin/bash
grunt serve --open
自动化器
PATH="/usr/local/bin:$PATH"
~/Public/Sites/launcher.sh
现在,当我在Automator中运行它时,仍然会出现错误弹出窗口,但是它没有详细信息-它只是说:
The action "Run Shell Script" encountered an error.
“日志”面板显示空白条目。有没有办法获取更多信息?冗长的模式吗?
更新3
所以这很奇怪...如果我使用
&> ~/log
则可以。没有它,它将失败。但这是可行的,谢谢@ mklement0,现在就可以了
PATH="/usr/local/bin:$PATH"
cd ~/Public/Sites && ./launcher.sh &> ~/log
最佳答案
问题是从Automator运行时,$PATH
变量与从Terminal运行时没有相同的条目。
值得注意的是,缺少/usr/local/bin
,这是通常安装grunt
的位置(如果已全局安装)。
一个简单的解决方法是将安装grunt
的文件夹添加到Automator shell脚本顶部的$PATH
中:
PATH="/usr/local/bin:$PATH"
~/Public/Sites/Launcher.sh
除此之外:
您的shell命令
$(grunt serve --open)
应该只是grunt serve --open
-不需要命令替换($(...)
或`...`
),因为实际上它将首先执行命令,然后尝试执行该命令的输出。默认工作目录。从Automator运行shell脚本时,
~
(您的主文件夹)可能不是您的脚本所期望的;看起来您的脚本需要自己的目录。作为工作目录。因此请使用cd ~/Public/Sites && ./launcher.sh
调用它。万一Shell脚本以非零退出代码退出,Automator将报告错误。错误消息将包含shell脚本的stderr输出(以及其他所有内容)-听起来您的情况下没有生成stderr输出。
要捕获所有输出以进行诊断,请使用
./launcher.sh &> ~/log
之类的东西在macOS 10.11至至少10.15(此更新)中,在从Automator工作流程运行的Shell脚本中,
$PATH
具有以下值:/usr/bin:/bin:/usr/sbin:/sbin