[英]Silent while loop in bash
我正在寻找创建一个 bash 脚本,该脚本不断检查目录中的文件并对其执行某些操作。 我正在使用 while 循环,如果文件不存在,我希望 while 循环保持不变并继续检查条件。 这是我创建的内容,但如果文件不存在,它会不断抛出找不到文件的错误。
while [ ! -f /home/master/applications/tmp/mydata.txt ]
do
cat mydata.txt;
rm mydata.txt;
sleep 1; done
您的实现中有两个问题:
[ ! -f $file ]
[ ! -f $file ]
以及您的 cat 和 rm 命令。 cat
命令正在当前工作目录 ( pwd
) 中查找文件,而您的 while 语句可能正在其他地方查找,因此,您的实现有问题,如果您的pwd
不是/home/master/applications/tmp
,则无法按预期工作/home/master/applications/tmp
.
尝试这个:
file="/home/master/applications/tmp/mydata.txt"
while [ ! -f "$file" ]
do
sleep 1
done
cat $file
rm $file
编辑
根据@Ivan 的建议,您可以使用直到而不是while
因为它更适合您的要求。
file="/home/master/applications/tmp/mydata.txt"
until [ -f "$file" ]; do sleep 1; done
cat $file
rm $file
做出与 abhiarora 不同的假设,我猜您可能希望该文件重新出现,并且您希望每次都显示它。
file=/home/master/applications/tmp/mydata.txt
while :
do if [[ -f "$file" ]]
then echo "$(<"$file")"
rm "$file"
fi
sleep 1
done
这将创建一个无限循环。 如果这不是您想要的,请使用 abhiarora 的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.