如何根據 ssh 主機名自動更改終端背景?
如何根據 ssh 進入的主機名以程式方式更改終端視窗的背景顏色?
即,當我通過 ssh 進入生產硬體上的實時嵌入式系統時,我希望終端背景變為紅色 - 以“保持意識”我在哪個伺服器上。在 PS1 中只有主機名並不總是足夠的。
我正在使用 gnome-terminal,但會接受 Linux 下的任何可行解決方案。
您可以使用 ssh LocalCommand 發出 ANSI 轉義序列以更改背景顏色,並為每個主機(或主機模式)設置一個部分來選擇您希望與遠端主機對應的適當顏色。
如果您的生產伺服器遵循“以 prod 開頭”之類的命名約定,您可以在 ~/.ssh/config 文件中嘗試以下程式碼段:
Host prod* PermitLocalCommand yes LocalCommand printf "\x1b[41m\x1b[2JPRODUCTION SYSTEM [%n]\n\n"
如果沒有方便的命名約定來使用萬用字元模式,您可以只列出用空格分隔的主機名。您還可以為各種其他非生產伺服器創建具有不同顏色值和字元串的其他主機塊。
連接到匹配模式的主機後,會在本地執行對應的printf,將背景色改為紅色([41m選擇紅色作為背景色,[2J部分用更新後的背景色重繪整個螢幕。見https://en.wikipedia.org/wiki/ANSI_escape_code更多選項)
這種方法最大的麻煩是背景顏色在退出 ssh 會話時仍然存在;沒有對應的 LocalCommand 在斷開連接時執行(我知道)。ssh 的別名或 shell 包裝腳本可以
printf "\x1b[0m"
作為重置呼叫。另一方面,通過 LocalCommand 設置背景顏色意味著即使 ssh 沒有通過包裝腳本或別名執行,您也將獲得顏色設置。