a to inna para kaloszy
nie pisałeś wcześniej o dwu skryptach (x i x1) tylko
o jednym więc myślałem że ma wywoływać sam siebie.
Jeśli mają być dwa to Twój kod wygląda dość sensownie,
dopisałem przykład dzięki czemu mogłem przetestować,
trochę zmieniłem bo killall wydaje mi się tu nieeleganckie.
Wygląda na to że działa.
x (ten przykładowy) :
Kod: Zaznacz cały
#!/bin/bash
while : ; do (((RANDOM%4) == 0)) && echo 'blad a' || echo gazonk ; sleep 2 ; done
x1:
Kod: Zaznacz cały
#!/bin/bash
START='x'
START_PATH='';
which "$START" > /dev/null || START="${START_PATH:-./}${START}"
while true ; do
while read line ; do
[[ -z $c_pid ]] && c_pid="$line" || echo "input: $line, ${START}'s PID: $c_pid";
[[ "$line" =~ blad\ [abc] ]] && { kill "$c_pid" ; unset c_pid ; break ; }
done < <(sh -c "echo \$\$ ; exec $START" 2>&1)
echo ; echo " ! $START restarted !" ; echo
done 2> /dev/null
test:
Kod: Zaznacz cały
>>> ./x1
input: gazonk, ./x's PID: 12011
input: blad a, ./x's PID: 12011
! ./x restarted !
input: gazonk, ./x's PID: 12016
input: gazonk, ./x's PID: 12016
input: gazonk, ./x's PID: 12016
input: gazonk, ./x's PID: 12016
input: gazonk, ./x's PID: 12016
input: blad a, ./x's PID: 12016
! ./x restarted !
input: blad a, ./x's PID: 12029
! ./x restarted !
input: gazonk, ./x's PID: 12032
input: blad a, ./x's PID: 12032
! ./x restarted !
input: gazonk, ./x's PID: 12037
input: gazonk, ./x's PID: 12037
input: gazonk, ./x's PID: 12037
^C
>>>