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,作为后台进程,在子shell中运行,因此ret_code它设置的值与您在 <2> 和 <3> 中检查的值不同(应该相同,因为它的值不受sleep命令影响) .

于 2013-02-28T13:40:06.757 回答