我需要获取文件的内容,但希望在文件不存在时防止出现错误。
可以做这样的事情吗?
cat my-file.txt || false
答案1
你有几个选择
除非文件存在,否则避免打印文件,但
cat
如果文件存在但无法打开,仍然允许抱怨[ -f my-file.txt ] && cat my-file.txt
通过重定向,避免打印由于某种原因无法打开文件时生成的错误消息标准错误到“无处”
cat my-file.txt 2>/dev/null
避免设置
$?
为非零退出状态,这将表明发生了错误。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