261

サーバー上でプロセス ( と呼ばれるものと仮定some_process) が実行されているかどうかを確認しようとしています。そうである場合は 1 をエコーし​​、そうでない場合は 0 をエコーし​​ます。

これは私が使用しているコマンドですが、部分的にしか機能しません (詳細は以下を参照)。スクリプトは 1 行で記述する必要があることに注意してください。

ps aux | grep some_proces[s] > /tmp/test.txt && if [ $? -eq 0 ]; then echo 1; else echo 0; fi

注:[s] insome_proces[s]は、grepそれ自体が返されないようにするためのものです。

some_processが実行されている場合は、"1"エコーされますが、これは問題ありません。ただし、some_process実行されていない場合は、何もエコーされません。

4

5 に答える 5

360

明示的にチェックする必要はありません$?。ただ行う:

ps aux | grep some_proces[s] > /tmp/test.txt && echo 1 || echo 0 

これはエコーが失敗しないことに依存していることに注意してください。これは確かに保証されていません。これを書くためのより信頼できる方法は次のとおりです。

if ps aux | grep some_proces[s] > /tmp/test.txt; then echo 1; else echo 0; fi
于 2013-06-19T23:52:01.920 に答える
80

&&「そして成功した場合」を意味します。ifステートメントを右側に配置することで、 return の場合にのみ実行されるようになりgrepます0。それを修正するには、;代わりに次を使用します。

ps aux | grep some_proces[s] > /tmp/test.txt ; if [ $? -eq 0 ]; then echo 1; else echo 0; fi

(または改行を使用するだけです)。

于 2013-06-19T23:44:35.117 に答える
57

grep -vc出力で無視grepし、ps同時に行をカウントするために使用します。

if [[ $(ps aux | grep process | grep -vc grep)  > 0 ]] ; then echo 1; else echo 0 ; fi
于 2015-04-21T18:15:26.603 に答える
16

&&次のようにand||演算子をフルに活用できます。

ps aux | grep some_proces[s] > /tmp/test.txt && echo 1 || echo 0

grep 自体を除外するには、次のようにすることもできます。

ps aux | grep some_proces | grep -vw grep > /tmp/test.txt && echo 1 || echo 0
于 2013-06-19T23:52:36.490 に答える