.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_COMMAND
PS1
\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
出力を設定しますhostname
。myhost
所有者、${var^^}
拡張すると大文字になります。
答え2
別の方法は
PS1='\[\e[31;1m\][\u@$(hostname | perl -pe "\$_ = uc if m/master/") \T \w] \[\e[0m\]'
私のアドバイスはThorのアドバイスほど体系的ではないことを認めていますが、基本的に知っておくと良いでしょう。
$(cmd)
は一般的なコマンド代替構文ですbash
。
良いものもあります。どのようにbashプロンプトの構成のみを処理します。これは確かに読む価値があります。