Bash

shell 是否會自動將文件描述符 0、1 和 2 連接到其控制終端?

  • May 29, 2018

來自 Linux 程式介面

在互動式 shell 中,這三個文件描述符 0、1 和 2 通常指的是執行 shell 的終端。

  1. “執行shell的終端”是指互動式shell所屬會話的控制終端嗎?

如果是,如果 shell 的會話沒有控制終端怎麼辦? 2. 當 shell 從其父程序創建時,shell 是否會在以下每種情況下自動創建文件描述符 0、1 和 2 與終端之間的連接(繼承自 shell 的父程序):

  • 如果“執行 shell 的終端”或控制終端已經在不是 0、1 和 2 的文件描述符上打開?
  • 如果文件描述符 0、1 和 2 已經連接到不是“執行 shell 的終端”或控制終端的文件?
  1. 如果引號中的外殼是非互動式的怎麼辦?

謝謝。

順便說一句,假設“shell”是 POSIX 或 bash。

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

不。

這是通過 SSH 伺服器的分叉 pty-slave-side 部分、GUI 終端仿真器的分叉 pty-slave-side 部分等的各種實現來完成gettyopen-controlling-tty

請注意,引用的文本並不暗示shell 會這樣做。您基於憑空提出的錯誤前提提出了一大堆問題。

而且您知道這樣getty做,因為您在與此問題同時編寫的“登錄領導的程序會話何時開始? ”中寫道。

進一步閱讀

引用自:https://unix.stackexchange.com/questions/446583