我们如何断开文件描述符与任何文件的连接?

我们如何断开文件描述符与任何文件的连接?

在 bash 中,我们可以在文件描述符和文件之间创建连接,例如:

exec > /path/to/myfile

它将 fd 1 连接到文件。

我想知道如何断开 fd 与连接到它的任何文件的连接,以便 fd 不连接到任何文件?请注意,/dev/null/dev/tty是文件。

谢谢。

我的目的是弄清楚shell 是否自动将文件描述符 0、1 和 2 连接到其控制终端?bash,在同一 bash shell 中运行之前,断开 bash 中的 fd 0、1 和 2 。

答案1

您想要的是关闭文件描述符,在类似 Bourne 的 shell 中使用>&-(默认为 fd 1)或<&-(默认为 fd 0)运算符完成:

exec >&-
exec 1>&-
exec 1<&-

都是等价的并导致close(1)进行系统调用。

请注意,关闭文件描述符 0、1 和 2 通常是一个坏主意,因为大多数命令期望这些文件描述符打开(这是它们的 stdin、stdout 和 stderr),并且它们打开文件可能会导致该文件无意中成为它们的 stdin/ stdout/stderr 以及它们在 stdout 或 stderr 上打印的内容最终可能会写入这些文件中。

相关内容