2011-08-11 17 views
2

これは基本的に私の最初のbashスクリプトです。本当にシンプルなものがあります。Bash - なぜこの条件は私がそれをするべきだと思うのですか?

"$(pgrep firefox)"が、Firefoxが動作していないのに何かを返すように見えない理由はわかりません。

スクリプトでは、常にFirefoxインスタンスを実行したままにしてください。

#!/bin/bash 
while true; 
do 
     if [ -z "$(pgrep firefox)" ] 
       then 
         echo "firefox not running. Starting now..." 
         firefox 
     fi 
done 

私は予想通り、それは

if [ -z "$(pgrep firefox)" ]; then echo "not running"; fi 
+0

あなたは、コマンドプロンプトテストが逆の論理(「実行中の」V「は実行していない」)を有することを実現?また、 ";"の必要はありません。真実の後で(それは傷つけるとは思わない)。 –

+0

私は「走っていない」という意味でした。更新しました、ありがとう! – Bogdan

+0

これは非常に忙しいスクリプトです。あなたはwhileループの中で数秒間スリープ状態にしたいかもしれません。 –

答えて

3

は、あなたが返されているかを見るために$(pgrep firefox)の結果をプリントアウトしたことがあります動作するよう求めbashコマンドでこれを入力すると、本当に奇妙なことは何ですか?

ところで、ここで文字列を比較する必要はありません。 pgrep戻り、そうでない場合、プロセスが発見された場合はtrueとfalse、あなたがこれを行うことができますので:

if ! pgrep firefox 
then 
    echo firefox not running 
fi 
+0

'echo $(pgrep firefox)'を実行すると、ffが実行されている場合はpidが表示され、 – Bogdan

+0

の場合は表示されません。あなたの例を空の新しいスクリプトに入れてテストしました。 Firefoxが動作していない場合は、実際のスクリプトのPIDを取得します。 FFが実行されている場合は、2つのPIDを取得します.1つはff、もう1つはスクリプトです。コマンドプロンプトから実行すると、期待どおりに動作します。意味をなさない! – Bogdan

+0

ああ、そうです!スクリプトのpidが表示されています –

関連する問題