如何根據主機名更改 GNU 螢幕狀態行?
我有一個共享主目錄,它通過 NFS 在我登錄的所有 UNIX 伺服器上自動掛載。我想要一個 .screenrc (例如)將主機名以不同的顏色放在 hardstatus 行中,以指示我何時登錄生產與開發;我們的主機名可以通過使用模式匹配輕鬆完成。
有沒有辦法將條件語句放入.screenrc?對手冊頁的快速 grep 似乎沒有顯示任何明顯的內容。
編輯:
澄清一下,我已經有一個自定義的硬狀態行;我想根據呼叫螢幕的主機名更改顯示的一些著色/欄位。我的 PS1 已經有了類似的東西,但是當我從這些主機跳到路由器/交換機時,我寧願在螢幕狀態行中執行此操作,這不允許我進行任何提示著色。這樣,我可以有一個生產視窗,一個開發視窗,螢幕狀態線的顏色一目了然地告訴我我在哪個視窗。
我看到了兩種方法,第一種是由主機製作一個 .screenrc 文件。
像
.screenrc_serverA
,.screenrc_serverB
, …在您的 shell 啟動腳本中將 SCREENRC 設置為類似
.screenrc_
hostname``當然您可以使用 screen 的源命令
.screenrc_default
在每個自定義 .screenrc_… 文件中包含類似的內容,以便它們只包含標題/hardstatus 行而不是整個配置每次。第二種方法是
screen -X hardstatus lastline ...
在 shell 啟動腳本中執行命令,例如(使用 if 測試執行具有不同值的命令…取決於主機名)。當您登錄伺服器時, screen -X 不會執行任何操作,因為 screen 尚未啟動,但每次您在 screen 中打開新視窗時,hardstatus 都會更新。當然第一個解決方案更好,因為第二個解決方案會在您每次打開新聞視窗時刷新 hardstatus 行,這可能是無用的,因為主機名不會改變。
@radius 對 SCREENRC 的事情很滿意,但這不是一個非常完整的答案,所以我會詳細說明……
~/.bashrc
# Strip down a FQDN hostname="$(hostname | sed 's/\..*//')" # Use the case pattern for server groups case "$hostname" in mario|luigi|toad|peach|koopa*|bowser) export SCREENRC=~/.screenrc_prod;; dev*|vm*) export SCREENRC=~/.screenrc_dev;; esac # Use condensed bash "new test*" notation to override for specific servers # e.g. ~/.screenrc_bowser would get used instead of ~/.screenrc_prod [[ -f "~/.screenrc_$hostname" ]] && export SCREENRC="~/.screenrc_$hostname"
- 總是使用新的測試!
關於轉義字元的一句話
在腳本中包含顏色的正確方法是使用 tput,而不是轉義字元。您的轉義字元特定於您的終端。tput 命令是終端感知的。當我需要花哨的腳本時,我寫了這個:
~/bin/COLORS.sh
GT_RESET=$( tput sgr0) # Reset all attributes GT_BRIGHT=$( tput bold) # Set “bright” attribute GT_DIM=$( tput dim) # Set “dim” attribute (normal/non-bright) GT_ULINE=$( tput smul) # Set “underscore” (underlined text) attribute GT_BLINK=$( tput blink) # Set “blink” attribute GT_INVERSE=$( tput rev) # Set “inverse” attribute GT_HIDDEN=$( tput invis) # Set “hidden” attribute FG_BLACK=$( tput setaf 0) #foreground to color #0 - black FG_RED=$( tput setaf 1) #foreground to color #1 - red FG_GREEN=$( tput setaf 2) #foreground to color #2 - green FG_YELLOW=$( tput setaf 3) #foreground to color #3 - yellow FG_BLUE=$( tput setaf 4) #foreground to color #4 - blue FG_MAGENTA=$( tput setaf 5) #foreground to color #5 - magenta FG_CYAN=$( tput setaf 6) #foreground to color #6 - cyan FG_WHITE=$( tput setaf 7) #foreground to color #7 - white BG_BLACK=$( tput setab 0) #background to color #0 - black BG_RED=$( tput setab 1) #background to color #1 - red BG_GREEN=$( tput setab 2) #background to color #2 - green BG_YELLOW=$( tput setab 3) #background to color #3 - yellow BG_BLUE=$( tput setab 4) #background to color #4 - blue BG_MAGENTA=$( tput setab 5) #background to color #5 - magenta BG_CYAN=$( tput setab 6) #background to color #6 - cyan BG_WHITE=$( tput setab 7) #background to color #7 - white
我還製作了一個腳本來展示 tput 的使用。你可以從這個要點中得到它。
請參閱:
http ://www.ibm.com/developerworks/aix/library/au-learningtput/?S_TACT=