我正在尝试根据我使用 SSH 连接的主机来更改 PS1 的外观。我现在的PS1:
PS1='\[\e[1;32m\]\u@\h\[\e[1;34m\] \w\[\e[1;31m\]$(__git_ps1)\[\e[1;0;37m\] \$\[\e[0m\] '
对于主机,host1
我想用黄色替换第一种颜色,1;33
以黄色host2
为例1;35
。
如何确定我已使用 SSH 连接到给定主机并相应地更改 PS1?
答案1
分段构建提示规范,或使用中间变量,或两者的组合。 SSH 设置SSH_CLIENT
变量,该变量指示您从何处登录。然后,您可以使用主机名来确定您登录的位置。
if [[ -n $SSH_CLIENT ]]; then
case $HOSTNAME in
*.example.com) prompt_user_host_color='1;35';; # magenta on example.com
*) prompt_user_host_color='1;33';; # yellow elsewhere
esac
else
unset prompt_user_host_color # omitted on the local machine
fi
if [[ -n $prompt_user_host_color ]]; then
PS1='\[\e['$prompt_user_host_color'm\]\u@\h'
else
PS1=
fi
PS1+='\[\e[1;34m\] \w\[\e[1;31m\]$(__git_ps1)\[\e[1;0;37m\] \$\[\e[0m\] '
答案2
和另一个人一样,但是你可以还使用单独的 rc 文件ssh
。
<<\SSH_RC \
tee -a ~/.ssh/rc
case $HOSTNAME in
(host1) sshclr=1;;
(host2) sshclr=3;;
esac
...无论您在哪里分配$PS1
...
PS1="\[\e[1;$((32+ssh_clr))"'...
...您也可以将其放在单引号中...
PS1='\[\e[$((!$?|4));$((32+sshclr))...'
...如果最后执行的命令以非零退出代码退出,则应强调。这是一张照片...
我${SSH_CLIENT+ssh:}
在那里添加了扩展以清楚地表示@ssh:
以这种方式连接时......