首页 > 解决方案 > bash中的静默while循环

问题描述

我正在寻找创建一个 bash 脚本来不断检查目录中的文件并对其执行某些操作。我正在使用while循环,如果文件不存在,我希望while循环保持不变并继续检查条件。这是我创建的,但如果文件不存在,它会不断抛出找不到文件的错误。

while [ ! -f /home/master/applications/tmp/mydata.txt ]

do

cat mydata.txt;
rm mydata.txt;

sleep 1; done

标签: linuxbashwhile-loop

解决方案


您的实现中有两个问题:

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

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

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

尝试这个:

file="/home/master/applications/tmp/mydata.txt"
while [ ! -f "$file" ]
do
sleep 1
done

cat $file
rm $file

编辑

根据@Ivan 的建议,您可以使用until而不是while因为它更适合您的要求。

file="/home/master/applications/tmp/mydata.txt"
until [ -f "$file" ]; do sleep 1; done

cat $file
rm $file

推荐阅读