Mur*_*iar 32 colors gnu-screen
我有一个共享主目录,它通过 NFS 自动挂载在我登录的所有 UNIX 服务器上。我想要一个单一的 .screenrc(例如)将主机名放在 hardstatus 行中以不同的颜色来指示我何时登录到生产与开发;我们的主机名可以通过使用模式匹配轻松完成。
有没有办法将条件语句放入 .screenrc 中?手册页的快速 grep 似乎没有揭示任何明显的东西。
编辑:
澄清一下,我已经有一个自定义的硬状态行;我想根据调用屏幕的主机名更改显示的一些颜色/字段。我的 PS1 已经有了这样的东西,但是我宁愿在屏幕状态行中这样做,因为我从这些主机跳到路由器/交换机,这不允许我进行任何提示着色。这样,我可以有一个用于生产的窗口,一个用于开发的窗口,屏幕状态行的颜色一目了然地告诉我我在哪个窗口。
Bru*_*sky 16
@radius 与 SCREENRC 相关,但这不是一个非常完整的答案,所以我会详细说明......
# 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"
Run Code Online (Sandbox Code Playgroud)
* 总是使用新的测试!
在脚本中包含颜色的正确方法是使用 tput,而不是转义字符。您的转义字符特定于您的终端。tput 命令是终端感知的。我写这个是为了当我需要在我的脚本中花哨的时候:
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
Run Code Online (Sandbox Code Playgroud)
我也做了一个脚本来演示tput的使用。你可以从这个要点中得到它。
请参阅:
http : //www.ibm.com/developerworks/aix/library/au-learningtput/? S_TACT =
105AGY06 http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html
rad*_*ius 13
我看到有两种方法可以做到这一点,第一种是通过主机制作 .screenrc 文件。
像.screenrc_serverA
,.screenrc_serverB
...
在你的shell启动脚本设置SCREENRC喜欢的东西.screenrc_`hostname`
当然你可以使用屏幕的源命令,包括像.screenrc_default
在每个自定义.screenrc_ ...文件,以便它们只包含一个标题/ hardstatus线,而不是每次都是完整的配置。
第二种方法是screen -X hardstatus lastline ...
在你的 shell 启动脚本中执行类似的命令(使用 if 测试来执行具有不同值的命令...取决于主机名)。当您登录服务器时,screen -X 不会执行任何操作,因为 screen 还没有启动,但是每次您在 screen 中打开一个新窗口时,hardstatus 都会更新。
当然,第一个解决方案更好,因为第二个解决方案会在您每次打开新闻窗口时刷新 hardstatus 行,这可能是无用的,因为主机名不会改变。
只需在您的 .screenrc 中将其设置为 hardstatus 变量。只要您使用像 %H 这样的变量作为主机名,它就会更改以匹配您使用的任何主机名。
hardstatus alwayslastline "%{rk}%H %{gk}%c %{yk}%M%d %{wk}%?%-Lw%?%{bw}%n*%f %t%?(%u)%?%{wk}%?%+Lw%?"
Run Code Online (Sandbox Code Playgroud)
会在底部给你一个状态行,看起来像
主机名是黑底红字,时间是黑底绿字,日期是黑底黄字。标有 * 的窗口是当前窗口,以白底蓝字显示。标有 - 的窗口是之前活动的窗口,显示为黑底白字。上面的窗口 1 既不是当前窗口,也不是以前的窗口,将显示为黑底白字。其他可能性将向您显示附加到窗口的其他用户,黑底白字,并用 + 标记。
如果您通过 SSH 连接到远程服务器来运行 screen,那么显示时间也有助于保持活动状态,因为每分钟更改一次的时间将使您的会话保持活动状态,即使 shell 在远程端处于空闲状态。