繁体   English   中英

从 OSX Automator shell 脚本运行 Grunt

[英]Running Grunt from OSX Automator shell script

我有一个简单的 Gruntfile,我希望能够从 OSX Dock 中的图标运行它。

我创建了一个非常简单的 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

启动器.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 运行时的$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

在 macOS 10.11 到至少 10.15(截至此更新)上, $PATH在从 Automator 工作流运行的 shell 脚本中具有以下值: /usr/bin:/bin:/usr/sbin:/sbin

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM