SSH到特定服务器时如何使Apple终端窗口自动更改配色方案

时间:2020-03-06 14:58:46  来源:igfitidea点击:

当我切换到远程生产服务器时,我希望终端窗口的配色方案更改为明亮而令人恐惧的某种颜色,最好是红色,以警告我我正在触摸动态的令人恐惧的服务器。

如何使其自动检测到我在某处进行过剪切,并且如果该处在特定列表中,请更改配色方案?

我想更新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登录链。因此,如果我们先登录到测试服务器,然后从中登录到生产服务器,则背景将变为绿色。