假设我当前目录下有一个名为a.txt的文件,它的chmod值为000。
因此,如果我尝试写入该文件,我将会得到以下输出:
> printf "Hello" >> a.txt
-bash: a.txt: Permission denied
我该如何抑制这个输出?我已经尝试在命令后添加
2>/dev/null
,但这个重定向似乎没有像我最初希望的那样工作。假设我当前目录下有一个名为a.txt的文件,它的chmod值为000。
因此,如果我尝试写入该文件,我将会得到以下输出:
> printf "Hello" >> a.txt
-bash: a.txt: Permission denied
2>/dev/null
,但这个重定向似乎没有像我最初希望的那样工作。printf "Hello" 3>&2 2>/dev/null >>a.txt 2>&3 3>&-
这可以分解为以下步骤:
3>&2
将原始 stderr(FD 2)复制到默认情况下未使用的文件描述符(FD 3)上,创建原始目标的备份。2>/dev/null
然后将 stderr 指向/dev/null
。>>a.txt
将 stdout(FD 1)指向a.txt
,stderr指向 /dev/null
。2>&3
在 FD 2 上复制我们在 FD 3 上的备份,将 stderr 恢复到其原始目标,以便正在运行的程序可以记录错误。3>&-
删除备份,使文件描述符表看起来像什么都没有做一样。(通常可以安全地省略此步骤 - 大多数行为良好的程序将简单地忽略非标准文件描述符的初始值,除非明确告知要执行其他操作)。cmd 2> /dev/null > output 2> /dev/tty
。 - William Pursellprintf "Hello" 2> /dev/null >> a.txt
printf
来说,显然,如果它无法写入stdout,则运行它是没有意义的;但是我可以想到一些其他有副作用的情况,您实际上可能需要这样做。 - Charles Duffy