web-dev-qa-db-ja.com

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を変更するにはどうすればよいですか?

5
tomrozb

プロンプト仕様を分割して構築するか、中間変数を使用するか、または両方の組み合わせを使用します。 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\] '

他のものと同様ですが、あなたはcouldssh用に別のrcファイルも使用します。

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

...最後に実行されたコマンドがゼロ以外の終了コードで終了した場合に下線が引かれます。これが写真です...

enter image description here

${SSH_CLIENT+ssh:}拡張をそこに追加して、そのように接続されたときに@ssh:を明確に示します...

2
mikeserv