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