2013-02-28 68 views
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 

ret_code>是0Unix的返回代码改变

ret_code在< 2>不打印

ret_code在< 3>是空白

有人能告诉为什么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 
+0

1)第3行的stop.sh是什么? – 2013-02-28 10:01:09

+0

2)您可以调整回声语句以包含“1.”,“2”并包括脚本的输出吗? – 2013-02-28 10:01:41

+0

@AshBerlin这是另一个实际上停止服务的shell脚本。它通常运行良好,因此rc通常为0.但是有时它会卡住,因此这种复杂的写入方式可能会导致简单的停止/启动过程 – Jay 2013-02-28 13:13:00

回答

1

stop,作为后台处理,在一个子shell运行,所以ret_code它设置的值是从所述一个不同你在< 2检查>和< 3>(其应该是相同的,因为它的值不受sleep命令的影响)。

+0

我明白了!有没有什么方法可以在子shell中使用变量呢? – Jay 2013-02-28 16:17:32

+0

忽略以前的愚蠢评论:) - 我可以从subhell中导出变量以在主shell中使用? – Jay 2013-03-01 02:20:21