2015-11-26 171 views
1

我有一個簡單的Gruntfile,我希望能夠從我的OSX Dock中的圖標運行。從OSX Automator shell腳本運行Grunt

我創建了一個非常簡單的shell腳本(launcher.sh),我將其另存爲應用程序,以便將其添加到我的Dock中。

#!/usr/bin/env bash 
$(grunt serve --open) 

它也能正常工作與此家當:#!/bin/bash

然而,當我打電話shell腳本從Automator的工作流程,我得到了以下錯誤:當我直接在我的終端上運行它,它的偉大工程

launcher.sh: line 2: grunt: command not found 

這是我的Automator設置:

enter image description here

我在做什麼錯?


更新

如果我把這個在我的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 

的Automator

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 

回答

3

的問題是,從Automator的運行時,$PATH變量不具有相同的條目從終端運行時,因爲這樣做。

值得注意的是,/usr/local/bin丟失,這是在grunt通常安裝(如果安裝全局)。

簡單的解決方法是添加在grunt安裝到您的$PATH在Automator的shell腳本的頂部的文件夾:

PATH="/usr/local/bin:$PATH" 
~/Public/Sites/Launcher.sh 

旁白:

  • 您的shell命令$(grunt serve --open)應該只是grunt serve --open - 不需要命令替換($(...)`...`),因爲它實際上會首先執行命令,然後嘗試從該命令執行輸出

  • 默認工作目錄。當從Automator運行一個shell腳本是~(你的home文件夾),這可能不是你的腳本所期望的;它看起來像你的腳本期望它自己的目錄。成爲工作目錄,所以使用cd ~/Public/Sites && ./launcher.sh來調用它。

  • 如果shell腳本以非零退出碼退出,Automator將報告錯誤;該錯誤消息將包括shell腳本的stderr輸出(而不是其他任何東西) - 聽起來好像沒有stderr輸出正在產生你的情況。

    • 要捕獲所有輸出用於診斷目的,使用類似./launcher.sh &> ~/log

在OSX 10.11.1,$PATH有一個shell腳本里面以下值從運行Automator工作流程:/usr/bin:/bin:/usr/sbin:/sbin

+1

omg終於感到害怕---謝謝謝謝 –