防止文件不存在时出现错误

防止文件不存在时出现错误

我需要获取文件的内容,但希望在文件不存在时防止出现错误。

可以做这样的事情吗?

cat my-file.txt || false

答案1

你有几个选择

  1. 除非文件存在,否则避免打印文件,但cat如果文件存在但无法打开,仍然允许抱怨

    [ -f my-file.txt ] && cat my-file.txt
    
  2. 通过重定向,避免打印由于某种原因无法打开文件时生成的错误消息标准错误到“无处”

    cat my-file.txt 2>/dev/null
    
  3. 避免设置$?为非零退出状态,这将表明发生了错误。

     cat my-file.txt || true
    

在前两种情况下,下一个命令可以是状态测试以检查是否cat成功。例如

cat my-file.txt 2>/dev/null
[ $? -ne 0 ] && echo 'There was an error accessing my-file.txt'

此外,可以将其包装成更具可读性的条件,如下所示

if ! cat my-file.txt 2>/dev/null
then
    echo 'There was an error accessing my-file.txt'
fi

在最后一种情况下,在语句中使用该命令是没有意义的if,因为它成功地隐藏了退出状态,cat 使得复合命令的退出状态为总是零(在某种程度上,它“防止错误”)。

答案2

关闭标准错误2>&-

cat my-file.txt 2>&- || false

上和下:2>&-、2>/dev/null、|&、&>/dev/null 和 >/dev/null 2>&1 之间的区别

相关内容