繁体   English   中英

bash中的静默while循环

[英]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

您的实现中有两个问题:

  1. 您应该在 while 循环测试语句中使用相同的(绝对或相对)路径[ ! -f $file ] [ ! -f $file ]以及您的 cat 和 rm 命令。

cat命令正在当前工作目录 ( pwd ) 中查找文件,而您的 while 语句可能正在其他地方查找,因此,您的实现有问题,如果您的pwd不是/home/master/applications/tmp ,则无法按预期工作/home/master/applications/tmp .

  1. 您需要在 while 块之后移动 cat 命令和 rm 命令。 如果文件不存在,则 cat 文件没有意义。 我认为你放错了这些命令。

尝试这个:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM