我创建了一个 fd,exec
并希望将输出发布到新的 fd3
和 stdout 1
(在我的情况下是控制台)。我认为连接这个很简单,但找不到正确的语法。
我检查了https://tldp.org/LDP/abs/html/io-redirection.html和https://linuxize.com/post/bash-redirect-stderr-stdout/
想到了类似的东西:nc -l 4444 1>&3
但可以肯定的是,它只是将 stdout 链接到我的第三个 fd。或者更简单echo test 1>&3
那么我怎样才能实现这个目标呢?
答案1
如果nc
只写入一个文件描述符,则输出将仅发送到一个文件描述符。无法自动将其复制到两个 FD 之间——不仅在 shell 语法中,甚至在 OS 级别也是如此。
因此,要么重写 nc 以将其输出写入两次,要么将输出传送到单独的“复制器”程序。
标准tee
工具接近您想要的,尽管它只接受文件名,而不是文件描述符(当然,除了 stdout)。但是像这样使用它会让您获得类似的效果,尽管在 Linux 上它不会 100% 相同(它的 /dev/fd 重新打开底层文件,而不仅仅是复制 FD):
nc -l 4444 | tee /dev/fd/3