Gnu-Screen

如何根據主機名更改 GNU 螢幕狀態行?

  • November 17, 2017

我有一個共享主目錄,它通過 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=

105AGY06 http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html

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