我创建了一个文件描述符并希望在控制台 (stdout) 上输出这个新的 fd - 怎么做?

我创建了一个文件描述符并希望在控制台 (stdout) 上输出这个新的 fd - 怎么做?

我创建了一个 fd,exec并希望将输出发布到新的 fd3和 stdout 1(在我的情况下是控制台)。我认为连接这个很简单,但找不到正确的语法。

我检查了https://tldp.org/LDP/abs/html/io-redirection.htmlhttps://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

相关内容