値に応じたプロンプトの変更

値に応じたプロンプトの変更

.bash_profileに次のように環境変数を定義するとしましょう。

PS1='\[\e[31;1m\][\u@\h \T \w] \[\e[0m\]'

この変数を使用すると、Linuxプロンプトに次の特定の情報が表示されます。

[jeff@node21 01:48:30 ~] [jeff@node22 01:48:30 ~] [jeff@node23 01:48:30 ~] [jeff@master 01:48:30 ~]

「マスター」という単語が表示されたら大文字で表示したいと思います(そのノードでは何もしませんが、他のノードでタスクを実行することをrsh忘れたときに目立つことを望みます)。

「master」という単語が含まれていないため、sed変数には使用できません。PS1

最後に、ノード「マスター」にいるときにプロンプ​​トを大文字で表示したいと思います。変数「PS1」を評価して文字列を操作し、プロンプトが機能するように再割り当てする方法はありますか?

答え1

最新バージョンを使用していると仮定すると、代わりに変数を使用してbashこれを実行できます。PROMPT_COMMANDPS1\h

PROMPT_COMMAND='
  myhost=$(hostname)
  if [[ $myhost == master ]]; then
    myhost=${myhost^^}
  fi
'

PS1='\[\e[31;1m\][\u@$myhost \T \w] \[\e[0m\]'

PROMPT_COMMAND各プロンプトが作成される前に、その中のすべての項目が実行されます。上記の定義はのmyhost出力を設定しますhostnamemyhost所有者${var^^}拡張すると大文字になります。

答え2

別の方法は

PS1='\[\e[31;1m\][\u@$(hostname | perl -pe "\$_ = uc if m/master/") \T \w] \[\e[0m\]'

私のアドバイスはThorのアドバイスほど体系的ではないことを認めていますが、基本的に知っておくと良いでしょう。

$(cmd)

は一般的なコマンド代替構文ですbash

良いものもあります。どのようにbashプロンプトの構成のみを処理します。これは確かに読む価値があります。

関連情報