![](/img/trans.png)
[英]OSX Automator failing to run Python script with modules from shell
[英]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.