当我通过 SSH 连接到远程机器时,如何更改我的(Linux)终端的外观?

mac*_*ost 4 ssh terminal

我有时会发现自己打开了几个终端,其中一些终端通过 ssh 连接到其他(生产)机器。如果我在这些 ssh 终端之一上运行“删除数据库中的所有表”之类的命令,我可能会破坏大量客户的数据。但在开发过程中,我当然需要不时运行这些命令。

所以,我想知道:有没有一种方法可以让我的终端(最好是内置的 GNOME 终端,但如果需要,我愿意切换到不同的终端程序)在我使用 ssh 时改变它的视觉外观-ed 到远程机器?理想情况下,我会有正常的黑色背景,但是当我通过 ssh 连接到远程机器时,背景会变为红色。也许窗口的边框会变成红色并开始闪烁或什么的。

不过,外观变化的细节并不重要:重要的是让我立即明白,在某处通过 ssh 连接的终端上工作时,我需要更加小心。那可能吗?

PS 我确实找到了Contextual SSH,这正是我想要的......除了它仅限 Mac :-(

dem*_*ure 6

我建议将您的 $PS1 设置为相关信息,例如主机名等。您可以查看您选择的 shell 的手册页以了解详细信息。

您可以在bash 中对 PS1 执行的操作示例

我自己在 ~/.subbash/提示中有一个测试,它根据服务器设置提示的颜色。*

*参见 __prompt_command() 函数

您可以更改 PS1 的方法

您可以通过多种方式自定义 PS1,听起来您想要一些更引人注目的东西,所以我的示例会比将 加到\HPS1更复杂一些。要使用以下任何一项,您可以将它们添加到您的~/.bashrc(在远程服务器上,如果不是两者。我在所有计算机之间同步相同的配置)

注意:为了使这些更具可读性,以下假设声明了这些变量。
var 可以很容易地替换为内容。
此外,这些示例偏向于 bash,您可能需要针对其他 shell 进行调整。

RCol='\[\e[0m\]'    # Text Reset
Red='\[\e[0;31m\]'  # Red
Gre='\[\e[0;32m\]'  # Green
Yel='\[\e[0;33m\]'  # Yellow
Blu='\[\e[0;34m\]'  # Blue
Pur='\[\e[0;35m\]'  # Purple
Cya='\[\e[0;36m\]'  # Cyan
Whi='\[\e[0;37m\]'  # White
Run Code Online (Sandbox Code Playgroud)

根检查

您可能喜欢的一件事是测试 $USER,如果它是 root,或者可能是“生产”专用帐户:

if [ $UID -eq "0" ];then
    PS1="${Red}\h \W ->${RCol} "        # Set prompt for root
else
    PS1="\h \W -> "
fi
Run Code Online (Sandbox Code Playgroud)

如果您使用 root,这将使提示变为红色。

主机检查

您还可以测试有关当前机器的信息,并基于此设置颜色:

PS1=
PSCol=
if [ $HOSTNAME == 'moving-computer-of-doom' ]; then
    PSCol="$Cya"                # For Main Computer
elif [ $HOSTTYPE == 'arm' ]; then
    PSCol="$Gre"                # For pi
elif [ $HOSTNAME == 'ma.sdf.org' ]; then
    PSCol="$Blu"                # For MetaArray
elif [[ $MACHTYPE =~ arm-apple-darwin ]]; then
    PSCol="$Gre"                # For iOS
elif [ $MACHTYPE == 'i486-pc-linux-gnu' ]; then
    PSCol="$Whi"                # For Netbook
elif [[ "$MACHTYPE" == "x86_64--netbsd" && "$OSTYPE" == "netbsd" ]]; then
    PSCol="$Yel"                # For Main Cluster
else
    PS1+="\h "              # Un-designated catch-all
fi

PS1+="${PSCol}\W ->${RCol} "
Run Code Online (Sandbox Code Playgroud)

如果在我的笔记本电脑上,这会将提示设置为青色,对于我的 pi 或 iOS 等设置为绿色。
如果未列出,它会将主机名添加到提示中。
因此,如果您的生产服务器具有易于测试的内容(例如类似的主机名,您可以使用它)

PROMPT_COMMAND

在大多数情况下,如果没有这个,上述内容就可以正常工作。
如果您开始添加您希望在登录时更频繁地重新评估的内容(可能是目录的 git 状态),您可以使用 PROMPT_COMMAND 函数在每个命令之后评估 PS1。

没有这个,上面的工作正常。

注意:对不起,如果这些看起来令人困惑,这些是从我使用的设置中获取的,并且经过修改后可以在没有其他设置的情况下工作。