SSH到特定服务器时如何使Apple终端窗口自动更改配色方案
当我切换到远程生产服务器时,我希望终端窗口的配色方案更改为明亮而令人恐惧的某种颜色,最好是红色,以警告我我正在触摸动态的令人恐惧的服务器。
如何使其自动检测到我在某处进行过剪切,并且如果该处在特定列表中,请更改配色方案?
我想更新Terminal.app的Scheme,不知道我将如何在纯linux / unix env中进行此操作
解决方案
每当通过SSH登录时,为什么不只更改shell提示符?通常有特定的外壳变量:SSH_CLIENT,SSH_CONNECTION,SSH_TTY
我们可以在.bashrc中设置$ PS1变量。
red='\e[0;31m' PS1="$\[${red}\]"
编辑:
为此,请打开终端。然后说
#touch .bashrc
然后,我们可以在textEdit或者TextWrangler中打开.bashrc并添加以前的命令。
兼容Xterm的Unix终端具有用于设置背景和前景色的标准转义序列。我不确定Terminal.app是否共享它们;它应该。
case $HOSTNAME in live1|live2|live3) echo -e '\e]11;1\a' ;; testing1|testing2) echo -e '\e]11;2\a' ;; esac
第二个数字指定所需的颜色。 0 =默认值,1 =红色,2 =绿色,等等。因此,当将该代码段放入共享的.bashrc中时,它将为活动服务器提供红色背景,而对于测试服务器则提供绿色背景。我们还应该添加类似这样的内容,以在注销时重置背景。
on_exit () { echo -e '\e]11;0\a' } trap on_exit EXIT
编辑:Google提出了一种使用AppleScript设置背景颜色的方法。显然,这仅在与Terminal.app在同一台计算机上运行时才有效。我们可以使用几个包装函数来解决此问题:
set_bg_color () { # color values are in '{R, G, B, A}' format, all 16-bit unsigned integers (0-65535) osascript -e "tell application \"Terminal\" to set background color of window 1 to " } sshl () { set_bg_color "{45000, 0, 0, 50000}" ssh "$@" set_bg_color "{0, 0, 0, 50000}" }
连接到实时服务器时,我们需要记住要运行sshl而不是ssh。另一种选择是为ssh编写包装函数,该函数扫描其参数以查找已知的活动主机名,并相应地设置背景。
将以下脚本放在〜/ bin / ssh
中(确保在路径中将〜/ bin /
放在/ usr / bin /
之前):
#!/bin/sh HOSTNAME=`echo $@ | sed s/.*@//` set_bg () { osascript -e "tell application \"Terminal\" to set background color of window 1 to " } on_exit () { set_bg "{0, 0, 0, 50000}" } trap on_exit EXIT case $HOSTNAME in production1|production2|production3) set_bg "{45000, 0, 0, 50000}" ;; *) set_bg "{0, 45000, 0, 50000}" ;; esac /usr/bin/ssh "$@"
上面的脚本从" username @ host"行中提取主机名(假定我们使用" ssh user @ host"登录到远程主机)。
然后根据主机名设置红色背景(对于生产服务器)或者绿色背景(对于所有其他背景)。结果,所有的ssh窗口将带有彩色背景。
我在这里假设默认背景是黑色,所以当我们从远程服务器注销时,脚本会将背景颜色恢复为黑色(请参阅" trap on_exit")。
请注意,但是此脚本不会跟踪从一台主机到另一台主机的ssh登录链。因此,如果我们先登录到测试服务器,然后从中登录到生产服务器,则背景将变为绿色。