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

macos - 从OSX Automator Shell脚本运行Grunt-LMLPHP

我究竟做错了什么?



更新资料

如果将其放在我的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

09-04 16:00
查看更多