bash在命令失败时继续执行

bash在命令失败时继续执行,bash,Bash,我试图从一个目录中读取最新的2个文件,并使用bash将它们连接起来。 但是,当当前目录中没有扩展名为.log的文件时,命令ls-rt*.log失败,出现错误“ls:无法访问*.log:没有这样的文件或目录”。错误发生后,while循环似乎没有执行。 之后,我该怎么做才能使无限循环继续,即使一个命令失败。我不确定你的意思,但可能: #! /bin/bash while : do filenames=$(ls -rt *.log | tail -n 2) echo $filenam

我试图从一个目录中读取最新的2个文件,并使用bash将它们连接起来。 但是,当当前目录中没有扩展名为.log的文件时,命令
ls-rt*.log
失败,出现
错误“ls:无法访问*.log:没有这样的文件或目录”
。错误发生后,while循环似乎没有执行。
之后,我该怎么做才能使无限循环继续,即使一个命令失败。

我不确定你的意思,但可能:

#! /bin/bash

while :
do
    filenames=$(ls -rt *.log | tail -n 2)
    echo $filenames
    cat $filenames > jive_log.txt
    sleep 0.1
done
另一种方法是将其保存到数组中(例如,使用
readarray
),然后将最后2个元素传递给cat

while IFS= read -r FILE; do
    cat "$FILE"
done < <(exec ls -rt1 *.log  | tail -n 2) >> jive_log.txt
readarray-t FILES>)

如果要对
find
的输出进行排序,必须在开头添加排序键,以后可以删除该键

readarray -t FILES < <(exec ls -rt1 *.log)
cat "${FILES[@]:(-2)}" > jive_log.txt  ## Or perhaps you mean to append it? (>>)

使用
head
而不是
tail
要便宜一点。

使用
filenames=$(ls-rt*.log 2>/dev/null | tail-n2)
1)忽略错误。使用
find
而不是
ls
。2.)仅当使用选项
set-e
时,Bash才会退出。3.)使用
set-x
调试脚本。我正在使用ls-rt,以便获得2个最新文件。我想find不支持这一点。另外,尝试了set+e,但仍然不起作用。“done>jive_log.txt”抛出错误。意外标记附近出现语法错误`是的,我忘了添加另一个

readarray -t FILES < <(exec ls -rt1 *.log)
cat "${FILES[@]:(-2)}" > jive_log.txt  ## Or perhaps you mean to append it? (>>)
find . -name \*.log -printf '%T+\t%p\n' |
sort -r |
head -2 |
cut -f 2-