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;33host21;35

SSH를 사용하여 특정 호스트에 연결되어 있는지 확인하고 그에 따라 PS1을 변경하려면 어떻게 해야 합니까?

답변1

프롬프트 사양을 조각으로 작성하거나 중간 변수를 사용하거나 두 가지를 조합하여 사용하십시오. SSH_CLIENT로그인하는 위치를 나타내는 SSH 설정 변수입니다. 그런 다음 호스트 이름을 사용하여 로그인한 위치를 확인할 수 있습니다.

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))...'

...마지막으로 실행된 명령이 0이 아닌 종료 코드로 종료된 경우 강조되어야 합니다. 이것은 사진입니다 ...

여기에 이미지 설명을 입력하세요.

이런 식 으로 연결 ${SSH_CLIENT+ssh:}하면 @ssh:...

관련 정보