2016-04-04 80 views
2
所以

我有下面的代碼片段:防止TMUX從終端的IntelliJ開始

if [[ ps -p$PPID | grep 'java' == '' ]]; then 
    ZSH_TMUX_AUTOSTART=true; 
fi 

返回以下錯誤:

/home/otis/.zshrc:8: parse error: condition expected: ps 

的想法是,如果ps -p$PPID | grep 'java'返回任何然後設置ZSH_TMUX_AUTOSTART=true

我想做的事情,這是我想在自動地開始TMUX的原因,我的gnome-terminal,但不是在我的IntelliJ終端,如果我運行此命令在GNOME它沒有返回值,如果我從運行的IntelliJ它返回java

因此,邏輯基本上是堅實的,如果沒有任何返回總是啓動tmux,但我沒有那麼好的shell,所以任何幫助將不勝感激。

乾杯。

回答

3

您收到錯誤消息的原因是由於條件表達式([[ … ]])預期在ps之後的一個條件,因爲它需要字符串而不是命令。您必須將該命令封裝在$(…)以在條件表達式中使用其輸出。或者,您可以使用grep的退出代碼來確定是否找到了「java」,這就消除了對條件表達式的需求。

if ! ps -p $PPID | grep -q java; then 
    ZSH_TMUX_AUTOSTART=true; 
fi 

請注意,支票的返回值與您最初的預期相反。因此,如果退出代碼爲false,則!返回true,反之亦然。 -q只是抑制grep的輸出。

+1

這真的很好,我結束了使用'如果! ps -p $ PPID | grep -q java;然後'所以我添加'!'(不)修飾符這樣我就可以避免'else'語句。 –

+0

@OtisWright你當然是對的,'!'表示一個更清晰的陳述。我相應地編輯了答案。 – Adaephon