我有一个简单的Grunt文件,我希望能够从我的OSX基座中的图标运行。
我创建了一个非常简单的shell脚本(launcher.sh),我将其保存为应用程序,以便将其添加到Dock中。当我直接在我的终端中运行它时效果很好:
#!/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
但是,和以前一样,如果我直接在终端中运行脚本那么好 - 所以我认为@ mklement0对PATH
更新2
launcher.sh
#!/bin/bash
grunt serve --open
的Automator
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
答案 0 :(得分:4)
问题是从Automator运行时$PATH
变量与从终端运行时的条目不同。
值得注意的是,/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
在OSX 10.11.1上,$PATH
在从Automator工作流程运行的shell脚本中具有以下值:/usr/bin:/bin:/usr/sbin:/sbin