> a.txt -bash: a.t-6ren">
gpt4 book ai didi

bash - 重定向错误*来自重定向操作本身*

转载 作者:行者123 更新时间:2023-12-03 20:25:21 25 4
gpt4 key购买 nike

假设我在当前目录中有一个名为 a.txt 的文件。它的 chmod 值为 000。
因此,如果我尝试写入它,我会得到以下输出:

> printf "Hello" >> a.txt
-bash: a.txt: Permission denied
我怎样才能抑制这个输出?我试过附加 2>/dev/null我的命令,但这种重定向似乎并不像我最初希望的那样工作。

最佳答案

The answer by that other guy如果您还想抑制正在运行的命令中的错误,而不仅仅是在启动它之前执行的重定向中的错误,则是正确的。
如果您只想抑制来自重定向本身的消息,而不想抑制来自实际执行的错误消息,那么您需要一对额外的重定向来临时存储 stderr 的原始值,以便您以后可以恢复它:

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将标准输出(FD 1)指向 aa.txt ,stderr 指向 /dev/null .
  • 2>&3将我们在 FD 3 上的备份复制回 FD 2,将 stderr 恢复到其原始目的地,以便正在运行的程序可以记录错误。
  • 3>&-删除备份,保留文件描述符表,就像我们什么都不做一样。 (忽略这一点通常是安全的——大多数表现良好的程序将简单地忽略非标准文件描述符的初始值,除非明确告知否则)。
  • 关于bash - 重定向错误*来自重定向操作本身*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62685919/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com