bash在命令失败时继续执行
我试图从一个目录中读取最新的2个文件,并使用bash将它们连接起来。 但是,当当前目录中没有扩展名为.log的文件时,命令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
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-