[英]bash continue execution on command failure
#! /bin/bash
while :
do
filenames=$(ls -rt *.log | tail -n 2)
echo $filenames
cat $filenames > jive_log.txt
sleep 0.1
done
我正在嘗試從目錄中讀取最新的2個文件,並使用bash將它們加入。 但是,如果當前目錄中沒有帶有擴展名.log的文件,則命令ls -rt *.log
失敗,並顯示error "ls: cannot access *.log: No such file or directory"
。 錯誤發生后,while循環似乎無法執行。 我該怎么辦,即使一個命令失敗,無限循環也會繼續。
我不確定您的意思,但也許:
for (( ;; )); do
while IFS= read -r FILE; do
cat "$FILE"
done < <(exec ls -rt1 *.log | tail -n 2) >> jive_log.txt
sleep 1
done
注意ls
選項-1
,它逐行打印文件。
無論如何,您可以使用以下命令將最后兩個文件連接到jive_log.txt:
while IFS= read -r FILE; do
cat "$FILE"
done < <(exec ls -rt1 *.log | tail -n 2) >> jive_log.txt
另一種方法是將其保存到數組(例如,使用readarray
),然后將最后兩個元素傳遞給cat。
readarray -t FILES < <(exec ls -rt1 *.log)
cat "${FILES[@]:(-2)}" > jive_log.txt ## Or perhaps you mean to append it? (>>)
如果要對find
的輸出進行排序,則必須在開頭添加一個排序鍵,以后可以將其刪除。
find . -name \*.log -printf '%T+\t%p\n' |
sort -r |
head -2 |
cut -f 2-
用head
代替tail
比較便宜。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.