0
stop()
{
sh stop.sh
ret_code=$?
<1>echo ret_code is $ret_code
}

once=true
while $once
do
stop & PID=$!
<2>echo ret_code is $ret_code
sleep 2m
<3>echo ret_code is $ret_code
if [ $ret_code == 0 ]
then
break
else
kill $PID
fi
done

<1> の ret_code は 0 です

<2> の ret_code は印刷されません

<3> の ret_code は空白です

sleep コマンドの実行中および実行後に ret_code の値が変更される理由を教えてください。

編集:

私は別のアプローチを試みました。出来た -

#! /bin/sh

once=true
while $once
do
sh stop.sh & PID=$!
sleep 2m
kill $PID
if [ $? != 0 ]
then
echo stop has completed successfully within the time limit
echo starting ...
sh start.sh
break
fi
done
4

1 に答える 1

1

stopはバックグラウンド プロセスとしてサブシェルで実行されるため、ret_code設定する値は <2> および <3> でチェックした値とは異なります (その値はコマンドの影響を受けないため、同じである必要がありますsleep) 。 .

于 2013-02-28T13:40:06.757 に答える