2017-10-25 9 views
-1

このようなbashスクリプト内のif-thenステートメントを、やっている場合は、ここでfoo_processが実行されている場合はのpgrep条件文の構文

if [ "$pgrep foo_process" ] > 0; then 
other foo 
fi 

、if文以上がいるので、真の結果を生じるはずですpidは、

pgrep foo_process 

によって返されます。しかし、以下の "do while"スクリプトは、foo_processがいつ停止したかを検出していません。

#!/bin/bash 
if [ "$pgrep foo_process" ] > 0; then 
    while [ "$pgrep foo_process" ] > 0; do 
     /home/scripts/arttst.sh 
     sleep 2 
    done 
else 
fi 
exit 4 

なぜですか?

(0または1のいずれか)、それはまだ動作しませんをバイナリ出力を得るためのpgrep構文を使用した場合でも:

#!/bin/bash 
#pgrep foo_process 
if [ "$pgrep -f foo_process &> /dev/null ; echo $?" ] = 0; then 
    while [ "$pgrep -f foo_process &> /dev/null ; echo $?" ] = 0; do 
     bash /home/script/arttst.sh 
     sleep 2 
    done 
else 
exit 4 
fi 
exit 4 

答えて

0

-xスイッチでのpgrepを使用して解決:

if pgrep -x "foo_process" > /dev/null; then 
    while pgrep -x "foo_process" > /dev/null; do 
     bash /home/scripts/arttst.sh 
     sleep 2 
     pgrep -x "foo_process" > /dev/null 
    done 
else 
fi 
exit 4