Bash 自訂 console

Posted by Adam on August 24, 2022
MinGW(或 Git Bash)的視窗標頭(Window Title)本質上是由 Terminal 接收到特定的 ANSI 轉義序列(Escape Sequence)來動態控制的。在透過 SSH 連線到遠端主機後,視窗標頭是否會改變,主要取決於**遠端主機的 Shell 設定**以及**連線工具是否傳送了控制字元**。 **會切換標頭的原因** * **遠端 PS1 / PROMPT_COMMAND 設定:** 許多 Linux 發行版(如 Ubuntu)預設在 `.bashrc` 中設定了提示字元(`PS1`)或 `PROMPT_COMMAND`。當 Shell 渲染提示字元時,會包含一段抬頭控制指令(例如 `\e]0;\u@\h: \w\a`),強行將遠端的使用者名稱、主機名稱與目前目錄寫入 MinGW 的視窗標頭。 * **Terminal 類型支援:** MinGW 使用的 mintty 終端機完全支援 xterm 的 ANSI 控制碼,因此只要遠端傳送修改標頭的指令,MinGW 就會立刻執行並更新視窗標題。 **不會切換標頭的原因** * **乾淨的遠端 Shell 環境:** 部分系統(如 CentOS、Debian 原生環境或自訂的 minimal 環境)預設的 `PS1` 設定極簡,沒有包含修改視窗標題的 Escape Sequence,因此 MinGW 會繼續沿用連線前的本地標題。 * **使用非 Bash Shell:** 若遠端帳號預設使用 `sh`、`dash` 或未經設定的 `zsh` / `fish`,這些 Shell 預設不會主動發送 ANSI 標頭變更指令。 * **SSH 設定覆蓋:** 部分使用者會在 `.bashrc` 或 `.inputrc` 中停用(unalias/unset)視窗標題的自動更新,或是遠端的 `$TERM` 環境變數被設定為不支援標頭變更的類型(如 `TERM=dumb`)。 **如何自行控制視窗標頭** 若希望在 SSH 進主機後手動切換或固定標頭,可使用以下方法: * **手動執行指令切換:** ```bash echo -ne "\033]0;你要顯示的視窗標題\007" ``` * **固定在遠端 `.bashrc` 中:** 在遠端的 `~/.bashrc` 尾端加入以下設定,讓每一次進入該主機都自動更新標頭: ```bash export PS1="\[\e]0;\u@\h:\w\a\]$PS1" ```