首页 文章

如何将'stdout'重定向到'stderr'和'stderr'为'stdout'? [重复]

提问于
浏览
1

这个问题在这里已有答案:

我想将应该转到 stdout 的所有内容重定向到 stderr ,而将要转到 stderr 的所有内容都转到 stdout .

以下代码不起作用:

$ bin/stdout-test 1>&2 2>&1

我确信在某个地方有一个实际用途,但目前只是一个心理练习,以帮助学习和理解io重定向 .

在Ubuntu中,无论如何都将 stdoutstderr 重定向到控制台,因此您无法确定是否正在取得任何进展,但命令 tcpserver 会将 stdout 重定向到连接的远程用户,而 stderr 将重定向到启动 tcpserver 的终端会话,使其成为测试此类重定向的理想场所 .

我为此目的创建了一个测试项目:

1 回答

  • 6

    你的尝试不起作用,因为 1>&2 将stdout合并到stderr中,之后再没有希望将它们分开 . 您需要第三个临时文件描述符来进行交换,例如交换两个变量的值时 .

    使用 exec 移动文件描述符 .

    ( exec 3>&1- 1>&2- 2>&3- ; bin/stdout-test )
    

    要不就

    bin/stdout-test 3>&1- 1>&2- 2>&3-
    

    说明:

    • 3>&1- 将标准输出(FD 1)移动到FD 3

    • 1>&2- 将stderr(FD 2)移动到FD 1

    • 2>&3- 将FD 3移至stderr(FD 2)

    Moving File Descriptors .

相关问题