linux - bash中的静默while循环
问题描述
我正在寻找创建一个 bash 脚本来不断检查目录中的文件并对其执行某些操作。我正在使用while循环,如果文件不存在,我希望while循环保持不变并继续检查条件。这是我创建的,但如果文件不存在,它会不断抛出找不到文件的错误。
while [ ! -f /home/master/applications/tmp/mydata.txt ]
do
cat mydata.txt;
rm mydata.txt;
sleep 1; done
解决方案
您的实现中有两个问题:
- 您应该在 while 循环测试语句
[ ! -f $file ]
以及 cat 和 rm 命令中使用相同的(绝对或相对)路径。
该cat
命令正在当前工作目录 ( pwd
) 中查找文件,而您的 while 语句可能正在其他地方查找,因此,您的实现是错误的,如果您的pwd
is not ,将无法按预期工作/home/master/applications/tmp
。
- 您需要在 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
推荐阅读
- java - 递归 - 将括号设置为字符串字符
- c# - Blazor - 集合上的双向绑定
- stm32 - 在启动 I²C 通信时,状态寄存器 SR1 立即复位
- curl - VS 2012 的 CURL(版本 v 110)
- python - 多目标 ARIMA 预测 Python
- flutter - 从 Flutter 中的 Firestore 集合中获取所有文档
- javascript - 如何遍历一个扁平的 JS 数组,将其变成嵌套的父/子结构?
- octave - 如何以编程方式关闭 Octave 编辑器?
- desktop - 使用桌面连接“暂停”命令
- excel - 在 VBA 中解析 SOAP XML 响应