#何をしたいのか?
ssh接続先が複数あるとき、
マシンAだと思っていたらマシンBに接続していて、間違ってコマンド実行してしまった!
などのエラーをふせぐために、プロンプトの見た目を変えたい。
#結論
下記のようにシェルスクリプトを作成し、
#!/bin/bash
if [[ "$@" == foo ]]; then
ssh foo -t "export PS1='\[\e[32;40m\]\u@\h \W$\[\e[m\] '; bash --login"
elif [[ "$@" == bar ]]; then
ssh bar -t "export PS1='\[\e[30;42m\]\u@\h \W$\[\e[m\] '; bash --login"
else
ssh $@
fi
エイリアスを作成したシェルスクリプトに設定する。
alias ssh=/hoge/fuga/ssh-change-prompt.sh
設定後、シェルスクリプト内に設定した接続先へssh接続を行うと、
プロンプトの文字色や背景色が変更されている。
ここで表示している内容は、PS1という環境変数で定義されている。
echo $PS1
で、内容を確認することができる。
ここで、
特殊文字 | 意味 |
---|---|
\u | 現在のユーザのユーザ名 |
\h | ホスト名のうち最初の `.' までの部分 |
\W | 現在の作業ディレクトリのベース名 |
を意味している。 | |
詳細は | |
https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html#lbCE | |
こちらを参考にした。 |
この環境変数PS1を書き換えることにより、
プロンプトを変更することができる。
##2,ローカルでプロンプトを変える
環境変数PS1を書き換えることで、プロンプトを変更することができる。
ここでは、プロンプトの内容は変えず、文字色や背景色だけを変更する。
export PS1='\[\e[30;42m\]\u@\h \W$\[\e[m\]'
上記のコマンドで、プロンプトの文字色、背景色を変えることができる。
色指定時の構文などの詳細については、
http://www.m-bsys.com/linux/echo-color-1
こちらを参考にした。
##3,ssh接続時、リモートマシンにコマンドを渡す
ssh foo -t "hogecommand'; bash --login"
hogecommandを実行した結果をログインシェルとして使い、それを
仮想端末で利用できるようにする。
##4, ssh接続時、接続先によってプロンプトの文字色/背景色を変える
2,3 を組み合わせてシェルスクリプトを作る。
#!/bin/bash
if [[ "$@" == foo ]]; then
ssh foo -t "export PS1='\[\e[32;40m\]\u@\h \W$\[\e[m\] '; bash --login"
elif [[ "$@" == bar ]]; then
ssh bar -t "export PS1='\[\e[30;42m\]\u@\h \W$\[\e[m\] '; bash --login"
else
ssh $@
fi
接続先fooでは、文字色がGreenで背景がBlack
接続先barでは、文字色がBlackで背景がGreen
となるように設定する。
このシェルスクリプトへエイリアスを設定し、ssh接続先に実行することで、
接続先によってプロンプトの文字色/背景色を変えることができた。
#補足
・リモートマシンの.bash_profileなどにPS1の設定を書いておけば、ローカルでシェルスクリプトを作成したり、エイリアスを設定しなくてもよい。今回この方法で行ったのは、リモートマシンの.bash_profileを変更したくなかったため。