我們如何斷開文件描述符與任何文件的連接?

我們如何斷開文件描述符與任何文件的連接?

在 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 上列印的內容最終可能會寫入這些檔案中。

相關內容