Rgo*_*ike 0 bash shell while-loop
我正在编写一个例程来识别进程是否停止运行,并且一旦目标进程消失就会执行某些操作.
我想出了这段代码(作为我未来代码的测试):
#!/bin/bash
value="aaa"
ls | grep $value
while [ $? = 0 ];
do
sleep 5
ls | grep $value
echo $?
done;
echo DONE
Run Code Online (Sandbox Code Playgroud)
我的问题是,由于某种原因,循环永远不会停止,并在删除文件"aaa"后回显1.
0
0 >>> I delete the file at that point (in another terminal)
1
1
1
1
.
.
.
Run Code Online (Sandbox Code Playgroud)
我删除文件后,我希望输出为"DONE"...
有什么问题?
解:
#!/bin/bash
value="aaa"
ls | grep $value
while [ $? = 0 ];
do
sleep 5
ls | grep $value
done;
echo DONE
Run Code Online (Sandbox Code Playgroud)
$?变化的价值非常容易.在当前版本的代码中,此行:
echo $?
Run Code Online (Sandbox Code Playgroud)
打印上一个命令的状态(grep) - 但它设置$?为0,即echo命令的状态.
将值保存$?在另一个变量中,该变量在下次执行命令时不会被破坏:
#!/bin/bash
value="aaa"
ls | grep $value
status=$?
while [ $status = 0 ];
do
sleep 5
ls | grep $value
status=$?
echo $status
done;
echo DONE
Run Code Online (Sandbox Code Playgroud)
如果ls | grep aaa要检查名为的文件是否aaa存在,则:
while [ ! -f aaa ] ; ...
Run Code Online (Sandbox Code Playgroud)
这是一种更清洁的方式.