这个问题在这里已有答案:
我想将应该转到 stdout
的所有内容重定向到 stderr
,而将要转到 stderr
的所有内容都转到 stdout
.
以下代码不起作用:
$ bin/stdout-test 1>&2 2>&1
我确信在某个地方有一个实际用途,但目前只是一个心理练习,以帮助学习和理解io重定向 .
在Ubuntu中,无论如何都将 stdout
和 stderr
重定向到控制台,因此您无法确定是否正在取得任何进展,但命令 tcpserver
会将 stdout
重定向到连接的远程用户,而 stderr
将重定向到启动 tcpserver
的终端会话,使其成为测试此类重定向的理想场所 .
我为此目的创建了一个测试项目:
1 回答
你的尝试不起作用,因为
1>&2
将stdout合并到stderr中,之后再没有希望将它们分开 . 您需要第三个临时文件描述符来进行交换,例如交换两个变量的值时 .使用
exec
移动文件描述符 .要不就
说明:
3>&1-
将标准输出(FD 1)移动到FD 31>&2-
将stderr(FD 2)移动到FD 12>&3-
将FD 3移至stderr(FD 2)见Moving File Descriptors .