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

cla*_*rkk 0 linux error-handling files

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

可以做这样的事情吗?

cat my-file.txt || false
Run Code Online (Sandbox Code Playgroud)

roa*_*ima 5

你有几个选择

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

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

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

     cat my-file.txt || true
    
    Run Code Online (Sandbox Code Playgroud)

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

cat my-file.txt 2>/dev/null
[ $? -ne 0 ] && echo 'There was an error accessing my-file.txt'
Run Code Online (Sandbox Code Playgroud)

此外,这可以被包装成一个更易读的条件,像这样

if ! cat my-file.txt 2>/dev/null
then
    echo 'There was an error accessing my-file.txt'
fi
Run Code Online (Sandbox Code Playgroud)

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