2014-04-09 89 views
0
sh bothworkfile.txt >> cleanup_process.log 

while [[ `ps -eaf | grep -c "cleanx"` -ge 2 ]] 
do 
sleep 10 
echo "Please be patient, we are still cleaning stuffs ! " 
done 
    echo " Clean up is done." 

嗨我正在使用ksh。 bothworkfile.txt包含几行用于在后台运行进程。虽然在ksh循环

cat bothworkfile.txt 
cleanx data01.xsd*.* & 
cleanx data01.xsd*.* & 

Cleanx是我的本地shell中的一个实用程序。默认情况下,总是有一个cleanx在后台运行。因此,

ps -eaf | grep -c "cleanx" 

总是给出1,但是当脚本调用它时,数字会增加。

但现在的问题是,似乎我无法进入while循环。运行脚本后,它会打印出“清理完成”。

请帮我理解它为什么不进入while循环。再次,它的ksh shell。

+0

当我做cleanx data01.xsd * * cleanx data01.xsd * *命令行和运行PS -eaf上| grep -c“cleanx”它显示3 ...所以'ps -eaf | grep -c“cleanx”'-ge 2是正确的..但它的整个while循环.. – May

回答

1

为了更容易调试和看到的结果是,你期待什么真正的ps -eaf | grep -c "cleanx"结果分配给一个变量,然后测试该变量。我怀疑它正在计算空白或小于2,这会导致测试返回false,从而跳过循环。所以,在测试之前将其打印出来,以便您确实知道。 。事情是这样的:

cleanx_count=$(ps -eaf | grep -c "cleanx") 

printf "Cleanx_count: %d/n" ${cleanx_count} 

while [[ ${cleanx_count} -ge 2 ]] 
+0

谢谢加里!该SH bothworkfile.txt这么快就完成没有适当履行其职责,从而cleanx_count couldnot捕捉过程。但是,这个调试信息帮助我了解了这一点。非常感谢。 – May