cla*_*rkk 0 linux error-handling files
我需要获取文件的内容,但希望在文件不存在时防止出现错误。
可以做这样的事情吗?
cat my-file.txt || false
Run Code Online (Sandbox Code Playgroud)
你有几个选择
除非文件存在,否则避免打印文件,但cat如果文件存在但无法打开,仍然允许抱怨
[ -f my-file.txt ] && cat my-file.txt
Run Code Online (Sandbox Code Playgroud)
通过将stderr重定向到“无处” ,避免打印由于某种原因无法打开文件时生成的错误消息
cat my-file.txt 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
避免设置$?为非零退出状态,这将表明发生了错误。
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 使得复合命令的退出状态始终为零(它“防止错误”,在方式)。