我有时会发现自己打开了多个终端,其中一些终端通过 ssh 连接到其他(生产)机器。如果我在其中一个 ssh 终端上运行“删除数据库中的所有表”之类的命令,我可能会破坏大量客户数据。但在开发过程中,我当然需要不时运行这些命令。
所以,我想知道:有没有办法让我的终端(理想情况下是内置的 GNOME 终端,但如果有必要,我愿意切换到其他终端程序)在通过 ssh 连接到远程计算机时改变其外观?理想情况下,我会使用正常的黑色背景,但当我通过 ssh 连接到远程计算机时,背景会变为红色。也许窗口的边框也会变为红色并开始闪烁或类似情况。
不过,外观变化的细节并不重要:重要的是让我立即意识到,在某个地方通过 ssh 连接的终端上工作时,我需要更加小心。这可能吗?
PS我确实找到了上下文 SSH,这正是我想要的......只是它只适用于 Mac :-(
答案1
我建议将您的 $PS1 设置为相关信息,例如主机名等。您可以查看您选择的 shell 的手册页以了解详细信息。
以下是您可以对 PS1 执行的操作示例狂欢
我自己在 ~/.subbash/ 中有一个测试迅速的根据服务器设置提示的颜色。*
*参见 __prompt_command() 函数
改变 PS1 的方法
您可以通过多种方式自定义 PS1,听起来您想要一些更引人注目的东西,所以我的示例会比仅仅将其添加\H
到 PS1 更复杂一些。要使用以下任何一种,您可以将它们添加到您的~/.bashrc
(在远程服务器上,如果不是两者。我在所有计算机之间同步相同的配置)
笔记:为了使这些内容更具可读性,以下假定这些变量已声明。
变量可以很容易地用内容替换。
此外,这些示例偏向于 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
根检查
您可能喜欢的一件事是测试 $USER,看它是否是 root,或者可能是一个仅限“生产”的帐户:
if [ $UID -eq "0" ];then
PS1="${Red}\h \W ->${RCol} " # Set prompt for root
else
PS1="\h \W -> "
fi
如果你是 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} "
如果在我的笔记本电脑上,这会将提示设置为青色,如果在我的 pi 或 iOS 上,则设置为绿色,等等。
如果没有列出,它会将主机名添加到提示中。
因此,如果您的生产服务器有一些易于测试的东西(例如类似的主机名,您可以使用它)
PROMPT_COMMAND
在大多数情况下,即使没有这个,上面的操作也能正常工作。
如果您开始添加想要更频繁地重新评估登录的内容(可能是目录的 git 状态),则可以使用 PROMPT_COMMAND 函数在每个命令之后评估 PS1。
即使没有这个,上面的工作也可以正常进行。
笔记:抱歉,如果这些看起来令人困惑,这些都是从我使用的设置中获取的,并且经过修改后无需其他设置就可以工作。
答案2
这是一篇很棒的文章,我用它来自定义我的 bash 提示符:
http://www.ibm.com/developerworks/linux/library/l-tip-prompt/
由于我已将提示的主机名部分设置为红色,因此当我登录到服务器时可以轻松看到。
我在 bash_profile 中用作 PS1 的值是:
PS1="[\e[32;1m]\u[\e[0m][\e[34;1m]@[\e[0m][\e[31;1m]\h[\e[0m]:[\e[34;1m]\w $[\e[0m] "
这样我的用户名就变成绿色,后面跟着蓝色的“@”符号,然后主机名变成红色,最后是蓝色的“~$”。您可能已经看到自定义是多么容易,可以帮助您轻松查看何时登录到不同的服务器
请务必仔细阅读本文,因为它解释了如何正确转义每个序列。如果无法转义序列,则在输入较长的命令时可能会导致一些不可预测的行为。
答案3
显然,所有先前的答案都只适用于 Bash。我在某些设备上使用 Busybox,因此需要一个替代方案。
根据这您可以在登录脚本中添加一行通用代码,该脚本应该可以工作(对我来说,它在多个不同的主机上都有效):
echo -n "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"