Ubuntuのbashプロンプト-ホスト名(\ h)と同じFQDN(\ H)


14

私の職場には、開発、テスト、統合、およびステージングのための個別の環境があります。

これらのenv内で、DNSのホスト名をオーバーロードしました。たとえば、dev環境ではプライマリWebマシンが呼び出さweb1.dev.example.comれ、テスト環境ではプライマリWebマシンがになりweb1.test.example.comます。

異なる環境のマシンを区別するために、ホスト名だけでなくFQDNを表示するようにbashプロンプトをカスタマイズします。よくて; 私は置き換えることができるはず\h\H$PS1、右?うーん。それらはまったく同じことを示しています。

me@web1:~$ hostname
web1
me@web1:~$ hostname -f
web1.dev.example.com
me@web1:~$ export PS1="\[\u@\h: \w\]\$ "
me@web1: ~$ export PS1="\[\u@\H: \w\]\$ "
me@web1: ~$ 

では/etc/hostname、ホスト名()だけを取得ていweb1ます。hostnameそして、hostname -f(それぞれ「web1と」と「web1.test.example.com」)正しい結果を返す、と私は正しいエントリを持っている両方/etc/hosts

何が得られますか?

これらがUbuntu 10.04ホストである場合、違いが生じます。

回答:


18

の明示的な呼び出しを使用してhostname -f、システムのfqdnを取得してみてください。

export PS1="\[\u@$(hostname -f): \w\]\$ "

例えば

iain$ export PS1="\[\u@$(hostname -f): \w\]\$ "
iain@ub10-04-1.lan: ~$ 

編集:

さらなる調査により、/etc/hostname(Ubuntu)と/etc/sysconfig/network(CentOS)の内容が関連していることが示されています。FQDNがファイル内にある場合、\H正常に機能します。

ただし、Ubuntuのhostname(1)のマニュアルページには、/ etc / hostnameにFQDNを配置するべきではないと書かれていますが、理由については説明がありません。


それはちょっと醜いです:(しかし、それは仕事をし、私は少し長く、このオープンを残すかもしれない、「クリーン」な修正を持っていることは本当に素晴らしいことだろう。。
ベン・ウィリアムス

これはdebian / ubuntuに関連しているようです。centosで期待どおりに動作します。
user9517

1
ええ、それは間違いなくUbuntuの問題です。提案されたソリューションを使用することになりました。これをUbuntuのBashに対するバグとして本当に報告する必要があります。
ベンウィリアムズ

@BenWilliams:答えを更新して、それをより面白くしないようにします
user9517

Ubuntuのホスト名設定ドキュメントにも同じ曖昧さがあります。解決方法がわからない。
ドッグウェザー

4

ホスト名については、短いものでも長いものでも非常に多くの狂気があり、常に正しくホストすることは難しいので、あきらめてすべてをホスト名としてFQDNを使用するようにします...

私はあなたの環境であなたと同じことをしますが、私いるサイトを知っているので、プロンプトでFQDNを切り詰めます、そしてそれはスペースを節約します。また、環境に基づいてプロンプトを色分けするので、どこかで「重要」なことをしているときの警告が改善されます。また、パスを他のすべてのものからスペースで区切って、pwdのコピーと貼り付けを簡単にします。私の在庫からの抜粋/etc/profile

if hostname -f | grep -q '\.stg\.example\.com'; then
  _ROOT_COLOR=33  # yellow
  _USER_COLOR=36  # cyan
else
  _ROOT_COLOR=31  # red
  _USER_COLOR=32  # green
fi

if [ "`id -u`" -eq 0 ]; then
  PS1="\[\033[01;${_ROOT_COLOR}m\]$(hostname -f|sed 's/\.example\.com//')\[\033[01;34m\] \w #\[\033[00m\] "
else
  PS1="\[\033[01;${_USER_COLOR}m\]\u@$(hostname -f|sed 's/\.example\.com//')\[\033[01;34m\] \w $\[\033[00m\] "
fi

そして、「ugさ」に関しては、誰がプロンプトを表示するコードがどのように見えるか気にしますか?とにかく、ほとんどの場合、書き込み専用のコードです。


1
色の使用については+1。
サアドマスード

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.