Ak robíte príkaz if-then v bashovom skripte, ako je tento, kde:
if [ "$pgrep foo_process" ] > 0; then
other foo
fi
Keď je foo_process spustený, vyššie uvedené if-vyhlásenie by malo mať za následok skutočný výsledok, pretože pid sa vrátil
pgrep foo_process
bude väčší ako nula. Ale nižšie "do while" skript, nie je detekovať, keď je zastavený 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
Prečo?
Dokonca aj keď použijete syntax pgrep na získanie binárneho výstupu (buď 0 alebo 1), stále nebude fungovať:
#!/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
odpovede:
0 pre odpoveď č. 1Riešenie pomocou pgrep s prepínačom -x:
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