サーバーにログインしたときに色が変わるように、bashプロンプトを動的にする方法はありますか?
ですから、システム上では緑色を、サーバーに接続すると赤色に変更したいと思います。別に配置したくないサーバーが大量にある.bashrc
すべてのもの。
リモートプロンプトは、リモート~/.bashrc
によって設定されます。そのため、それをリモートサーバーにコピーする必要があります。ただし、すべてのホストに単一の~/.bashrc
を使用して、ホスト名に基づいてプロンプトの色を設定できます。
[ "$PS1" ] || return 0 # continue only when interactive
case $(hostname -s) in
laptop*)
Prompt_color='\033[48;5;16m\033[38;5;46m' # green(46) on black(16)
;;
server*)
Prompt_color='\033[48;5;16m\033[38;5;196m' # red(196) on black(16)
;;
esac
ORIG_PS1=$PS1 # in case needed
PS1='<\['${Prompt_color}'\]\h\[\033[m\]:\w>\$ '
unset Prompt_color
ノート:
PS1
がまだ設定されていない場合(つまり、シェルがインタラクティブでない場合)は設定しないでください。 PS1
が空でないかどうかをテストすることは、シェルがインタラクティブであるかどうかを判断する非常に一般的な方法であり、それを行うプログラムを混乱させたくありません。 (おそらく、より正確なテストは、$-
にi
が含まれているかどうかをチェックすることです。)
リモートサーバーにログインするときにこのコードを実行する場合は、プロファイルファイルの1つが常に~/.bashrc
をソースとして持つ必要があります。しかし、私はあなたがそれを知っていると思います。
PS1
では、エスケープコードを\[...\]
で囲む必要があります。
\[033[m
は、フォアグラウンドとバックグラウンドをデフォルトにリセットします。したがって、ここでは:\w
がターミナルのフォアグラウンド/バックグラウンドに表示されます。
\[033[48;5;XXXm\033[38;5;YYYm
は、背景/前景をXXX
/YYY
に設定します。
利用可能な色をダンプするスクリプトについては、 colortest
を試してください。
プロンプトがどのようになるかを確認するには:
echo -e "<\033[48;5;16m\033[38;5;196mhost\033[m:dir>$ "
リモートに別のPS1
を持たせたくない(できない)場合は、「いいえ」と言いますが、これは少なくとも非常に困難です。 SSH接続では、ローカル側にはシェルプロンプトとは何か、他には何があるのかについての実際の考えがないため、プロンプトの色の設定はリモートから行う必要があることを考慮してください。セッションを開始する前に色を設定することもできますが、それらはすべての出力に対して有効です。つまり、ls
またはエディターが独自の色を設定するまでです。
もちろん、セッションのラッパーを考え出してプロンプトのように見えるすべてのものを検出して色付けすることもできますが、それは簡単に誤検知($
?のあるすべての行に色を付ける)につながり、ひどく複雑になるでしょう。各マシンの.profile
または.bashrc
に1行をドロップするだけの場合と比較してください。
多くのマシンでは、すべてのマシンで構成変更を同期するソリューションを検索すると便利です。それのために作成されたツール、または単にスクリプト、またはループを実行してそれらすべてに(一連の)構成ファイルをコピーするためのものです。
私は最初に一時プロファイルをアップロードし、次にこのプロファイルを使用してsshを実行する(そして一時ファイルを削除する)sshpassでラッパースクリプトを使用しています。
スクリプトの2つの主なものは次のとおりです。scp ~/.bash_remote "${USER}"@"${IP}":/tmp/.bash_tmp 1>/dev/null
ssh -t "${USER}"@"${IP}" "bash --rcfile /tmp/.bash_tmp; rm /tmp/.bash_tmp"
これを使用すると、リモートセッションの色を簡単に定義できます。
これはあなたの質問に直接答えるものではありませんが、それを使って解決することができます。
あなたはcontext-color
に興味があるかもしれません、それは私がその正確な目的のためにまとめました: https://github.com/ramnes/context-color
これは、実行時にコマンド出力のハッシュに基づいて色を出力する単純なスクリプトです。 $PATH
のどこかにインストールすると、.bashrc
で次のようなことができます。
export PS1="$(context-color -p)$PS1\[\e[0m\]"
(ここで、--Prompt/-p
はプロンプトの色をエスケープするスイッチであり、\[\e[0m\]
は色をリセットするエスケープシーケンスです)
デフォルトでは、ハッシュの生成に使用されるコマンドはwhoami; hostname
です。ホスト名に応じて色を変更したいだけの場合は、$CONTEXT
変数環境(export CONTEXT="hostname"
)を変更するか、単に--context/-c
オプション(context-color -c "hostname"
)を使用できます。
以下の例をご覧ください。