从OSX Automator shell脚本

时间:2015-11-26 14:46:37

标签: macos bash shell automator

我有一个简单的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设置:

enter image description here

我做错了什么?

更新

如果我把它放在我的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

1 个答案:

答案 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