Dan*_*isp 3 macos bash shell automator
我有一个简单的 Gruntfile,希望能够从 OSX Dock 中的图标运行。
我创建了一个非常简单的 shell 脚本 (launcher.sh),我将它保存为一个应用程序,以便我可以将它添加到我的 Dock 中。当我直接在我的终端中运行它时效果很好:
#!/usr/bin/env bash
$(grunt serve --open)
Run Code Online (Sandbox Code Playgroud)
它也适用于这个shebang: #!/bin/bash
但是,当我从 Automator 工作流程调用 shell 脚本时,出现以下错误:
launcher.sh: line 2: grunt: command not found
Run Code Online (Sandbox Code Playgroud)
这是我的 Automator 设置:
我究竟做错了什么?
更新
如果我把它放在我的launcher.sh文件中:
#!/bin/bash
`/usr/local/bin/grunt serve --open`
Run Code Online (Sandbox Code Playgroud)
我在 Automator 中遇到了不同的错误: env: node: No such file or directory
但是,和以前一样,如果我直接在终端中运行脚本就好了 - 所以我认为 @mklement0 是正确的 PATH
更新 2
启动器.sh
#!/bin/bash
grunt serve --open
Run Code Online (Sandbox Code Playgroud)
自动机
PATH="/usr/local/bin:$PATH"
~/Public/Sites/launcher.sh
Run Code Online (Sandbox Code Playgroud)
现在我在 Automator 中运行它时仍然收到一个错误弹出窗口,但它没有详细信息 - 它只是说:
The action "Run Shell Script" encountered an error.
Run Code Online (Sandbox Code Playgroud)
日志面板显示一个空白条目。有没有办法获得更多信息?也许是详细模式?
更新 3
所以这很奇怪......如果我使用&> ~/log它的话。没有它就会失败。
但这是有效的,谢谢@mklement0,现在可以了
PATH="/usr/local/bin:$PATH"
cd ~/Public/Sites && ./launcher.sh &> ~/log
Run Code Online (Sandbox Code Playgroud)
问题是$PATH从 Automator 运行时的变量与从终端运行时的条目不同。
值得注意的是,/usr/local/bin缺少,这是grunt通常安装的位置(如果全局安装)。
一个简单的解决方法是将grunt安装的文件夹添加到$PATHAutomator shell 脚本的顶部:
PATH="/usr/local/bin:$PATH"
~/Public/Sites/Launcher.sh
Run Code Online (Sandbox Code Playgroud)
除此之外:
您的 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
| 归档时间: |
|
| 查看次数: |
2159 次 |
| 最近记录: |