2016-04-04 6 views
2

で始まるからだから私は、次のスニペットがあります防止TMUX IntelliJの端子

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

次のエラーが返されます。アイデアがあればps -p$PPID | grep 'java'返す何も、その後ZSH_TMUX_AUTOSTART=trueを設定していないということです

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

を。

私がgnomeでこのコマンドを実行すると、何も返されず、intellijから実行すると、javaが返ってくるので、自動的にgnome-terminalでtmuxを起動したいのですが、

返されるものがない場合、基本的にロジックは固いですが、常にtmuxを起動しますが、シェルではそれほど役に立ちませんので、どんな助けでも大歓迎です。

乾杯。

答えて

3

エラーメッセージが表示される理由は、psの後の条件を想定した条件式([[ … ]])によるものです。これはコマンドではなく文字列のために必要です。条件式内で出力を使用するには、コマンドを$(…)にラップする必要があります。あるいは、終了コードgrepを使用して、「java」が見つかったかどうかを判断することができます。これにより、条件式が不要になります。

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

小切手の戻り値は、元々意図したものと逆になっています。したがって、!は、終了コードがfalseであればtrueを返し、その逆も同様です。 -qは、grepの出力を抑制するだけです。

+1

これは本当にうまくいきました。私は 'if! ps -p $ PPID | grep -q java;それで私は 'else'ステートメントを避けることができるように '!'(not)修飾子を追加しました。 –

+0

@OtisWrightあなたはもちろん正しいですが、 '!'はより明確な声明を出します。私はそれに応じて答えを編集しました。 – Adaephon