运行 来自 OSX Automator shell 脚本的 Grunt
Running Grunt from OSX Automator shell script
我有一个简单的 G运行t 文件,我希望能够从 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
但是,和以前一样,如果我直接在终端中 运行 脚本就可以了 - 所以我认为 @mklement0 关于 PATH
是正确的
更新 2
launcher.sh
#!/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 运行ning 时的 $PATH
变量与从终端 运行ning 时的条目不同。
值得注意的是,缺少 /usr/local/bin
,这是通常安装 grunt
的地方(如果 全局安装 )。
一个简单的解决方法是在 Automator shell 脚本的顶部将安装 grunt
的文件夹添加到您的 $PATH
:
PATH="/usr/local/bin:$PATH"
~/Public/Sites/Launcher.sh
除此之外:
您的 shell 命令 $(grunt serve --open)
应该只是 grunt serve --open
- 不需要命令替换($(...)
或 `...`
), 因为这实际上会首先执行命令 and 然后尝试从该命令执行 output.
默认工作目录。当从 Automator 运行ning 一个 shell 脚本是 ~
(您的主文件夹)时,这可能不是您的脚本所期望的;看起来你的脚本需要它自己的目录。作为工作目录,所以使用 cd ~/Public/Sites && ./launcher.sh
调用它。
如果 shell 脚本以 nonzero 退出代码退出,Automator 将报告错误;错误消息将包括 shell 脚本的 stderr 输出(仅此而已)- 听起来您的情况没有产生 stderr 输出。
- 要捕获 all 输出以用于诊断目的,请使用类似
./launcher.sh &> ~/log
的内容
在 macOS 10.11 至至少 10.15(截至本次更新),$PATH
在来自 Automator 工作流程的 shell 脚本 运行 中具有以下值:/usr/bin:/bin:/usr/sbin:/sbin
我有一个简单的 G运行t 文件,我希望能够从 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
但是,和以前一样,如果我直接在终端中 运行 脚本就可以了 - 所以我认为 @mklement0 关于 PATH
更新 2
launcher.sh
#!/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 运行ning 时的 $PATH
变量与从终端 运行ning 时的条目不同。
值得注意的是,缺少 /usr/local/bin
,这是通常安装 grunt
的地方(如果 全局安装 )。
一个简单的解决方法是在 Automator shell 脚本的顶部将安装 grunt
的文件夹添加到您的 $PATH
:
PATH="/usr/local/bin:$PATH"
~/Public/Sites/Launcher.sh
除此之外:
您的 shell 命令
$(grunt serve --open)
应该只是grunt serve --open
- 不需要命令替换($(...)
或`...`
), 因为这实际上会首先执行命令 and 然后尝试从该命令执行 output.默认工作目录。当从 Automator 运行ning 一个 shell 脚本是
~
(您的主文件夹)时,这可能不是您的脚本所期望的;看起来你的脚本需要它自己的目录。作为工作目录,所以使用cd ~/Public/Sites && ./launcher.sh
调用它。如果 shell 脚本以 nonzero 退出代码退出,Automator 将报告错误;错误消息将包括 shell 脚本的 stderr 输出(仅此而已)- 听起来您的情况没有产生 stderr 输出。
- 要捕获 all 输出以用于诊断目的,请使用类似
./launcher.sh &> ~/log
的内容
- 要捕获 all 输出以用于诊断目的,请使用类似
在 macOS 10.11 至至少 10.15(截至本次更新),$PATH
在来自 Automator 工作流程的 shell 脚本 运行 中具有以下值:/usr/bin:/bin:/usr/sbin:/sbin