簡體   English   中英

bash在命令失敗時繼續執行

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM