通过 SSH 连接到其他主机时更改 PS1 颜色

通过 SSH 连接到其他主机时更改 PS1 颜色

我正在尝试根据我使用 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:以这种方式连接时......

相关内容