簡體   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