web-dev-qa-db-ja.com

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

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

これらの環境内で、DNSのホスト名をオーバーロードしました。開発環境では、プライマリ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にはjustというホスト名(web1)があります。 hostnamehostname -fはどちらも正しい結果(それぞれ「web1」と「web1.test.example.com」)を返し、/etc/hostsに正しいエントリを取得しました。

何ができますか?

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

15
Ben Williams

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

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

例えば.

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

編集:

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

しかし、Ubuntuのhostname(1)のマニュアルページでは、FQDNを/ etc/hostnameに含めるべきではないと述べていますが、理由は明らかにされていません。

20
user9517

ホスト名については、非常に狂ったように狂っています。短いものから長いものまで、常に正しいことはhard-だから、すべてをあきらめて、すべてがホスト名としてFQDNを使用するようにします...

私は自分の環境でもあなたと同じことをしますが、私はknowを使用しているサイトであり、スペースを節約するため、プロンプトでFQDNを削除します。また、環境に基づいてプロンプトを色分けしているので、「重要」な場所で何かをしているときの警告がわかります。また、パスを他のものからスペースで区切って、パスタのコピーを簡単にパスタできるようにしています。私の株式の抜粋/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

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

4
womble

これは、Ubuntuが/ etc/hostnameを管理する方法のバグです。

報告されたバグ: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1276796

0
Rodney