将所有文件描述符重定向到文件

将所有文件描述符重定向到文件

将输出从已知文件描述符重定向到文件就像

./binary 1> ./file 2>&1

但是,假设我有一个二进制文件,它可能使用除0,1和之外的文件描述符2

文件描述符,如果命令交互运行,12默认为当前文件描述符tty

我正在以交互方式运行二进制文件,但我认为该二进制文件还有其他指向当前的文件描述符,tty因为我已经将文件描述符重定向12一个文件,但仍然有一些输出被写入终端,而不是文件中。

它可能正在使用n许多其他文件描述符,但我不知道它正在使用哪些。

我只想将所有这些指向当前文件的文件描述符重定向tty到文件。

我不关心二进制文件写入哪个文件描述符,所有流都应该重定向到该文件

有点像

./binary *> ./file

答案1

如果命令交互运行,文件描述符 1 和 2 默认为当前 tty

不,它们不指向当前的 tty - 它们是 stdout 和 stderr,它们可能通过 shell 和终端的设置方式路由到当前终端。一种重要的区别;您的重定向将 stdout 和 stderr 拼接到某个特定的文件描述符,但与终端本身交互的人不受其影响:

如果您的二进制文件仍在向未重定向的终端写入数据,则它可能没有与 stdout 交互;它直接与伪终端交互(man 7 pty了解更多信息),例如通过像 ncurses 这样的库。

虽然这是一个字符设备,您可以“窥探”写入的内容,但这在“线性化”形式中可能没有意义。没有什么可以阻止应用程序向后写入单词(“向右移动 2 位,打印 o,向右移动 2 位,打印 l,向右移动 2 位,打印 l,向右移动 2 位,打印 e,向右移动 2 位,打印 h”而不是“你好”)。此外,此类程序往往会立即更新屏幕的重要部分!

相关内容