如何根据您 ssh 进入的主机名以编程方式更改终端窗口的背景颜色?
即,当我通过 ssh 连接到生产硬件上的实时嵌入式系统时,我希望终端背景变为红色 - 以“保持对我所在服务器的认识”。仅 PS1 中的主机名并不总是足够的。
我使用 gnome-terminal,但会接受 Linux 下任何可行的解决方案。
答案1
您可以使用 ssh LocalCommand 发出 ANSI 转义序列来更改背景颜色,并为每个主机(或主机模式)分配一个部分来选择要与远程主机相对应的适当颜色。
如果您的生产服务器遵循“以 prod 开头”之类的命名约定,您可以在 ~/.ssh/config 文件中尝试以下代码片段:
Host prod* PermitLocalCommand yes LocalCommand printf "\x1b[41m\x1b[2JPRODUCTION SYSTEM [%n]\n\n"
如果没有方便的命名约定来使用通配符模式,您可以只列出由空格分隔的主机名。您还可以为各种其他非生产服务器创建具有不同颜色值和字符串的附加主机块。
连接到与模式匹配的主机后,相应的 printf 将在本地执行,将背景颜色更改为红色([41m 选择红色作为背景颜色,[2J 部分使用更新的背景颜色重新绘制整个屏幕。参见https://en.wikipedia.org/wiki/ANSI_escape_code更多选择)
这种方法最大的麻烦是从 ssh 会话退出时背景颜色仍然存在;没有与 LocalCommand 对应的东西可以在断开连接时运行(据我所知)。 ssh 的别名或 shell 包装脚本可以printf "\x1b[0m"
作为重置调用。另一方面,通过 LocalCommand 设置背景颜色意味着即使 ssh 不通过包装器脚本或别名运行,您也将获得颜色集。