【发布时间】:2020-10-22 10:29:55
【问题描述】:
假设我在当前目录中有一个名为 a.txt 的文件。它的 chmod 值为 000。
因此,如果我尝试写入它,我会得到以下输出:
> printf "Hello" >> a.txt
-bash: a.txt: Permission denied
我怎样才能抑制这个输出?我已经尝试将2>/dev/null 附加到我的命令中,但这种重定向似乎并没有像我最初希望的那样工作。
【问题讨论】:
-
顺便说一句,您是否希望您的程序仍然运行,而不是静默地不被调用?对于
printf,显然,如果它不能写入标准输出,那么运行它是没有意义的;但我可以想到一些情况,其中可能存在您真正想要的其他副作用。 -
@CharlesDuffy 出于我的目的,这将在一个隐藏大部分输出并使用打印语句来解释正在发生的事情的一般概念的 bash 脚本中。此 printf 是 if 语句的一部分,如果写入失败,则会告知用户写入失败并在退出之前与我联系,代码为 1。
-
明白了。顺便说一句,信息和诊断信息通常应该打印到 stderr 而不是 stdout。这不仅仅是关注POSIX conventions 的问题,还可以确保如果您的标准输出通过管道传输到其他地方,您的日志仍然显示在正确的位置,并确保这些日志立即打印而不是缓冲(因为标准输出默认缓冲当打印到非 TTY 目的地时——为什么在这种情况下内容没有立即显示是这里的常见问题解答)。
标签: bash file stdout io-redirection stderr