私たちの職場には、開発、テスト、統合、ステージングのための個別の環境があります。
これらの環境内で、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
)があります。 hostname
とhostname -f
はどちらも正しい結果(それぞれ「web1」と「web1.test.example.com」)を返し、/etc/hosts
に正しいエントリを取得しました。
何ができますか?
これらは違いがある場合、Ubuntu 10.04ホストです。
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に含めるべきではないと述べていますが、理由は明らかにされていません。
ホスト名については、非常に狂ったように狂っています。短いものから長いものまで、常に正しいことは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
そして、「醜さ」に関する限り、プロンプトを表示するためのコードがどのように見えるかを誰が気にしますか?とにかく、ほとんどの場合それは書き込み専用のコードです。
これは、Ubuntuが/ etc/hostnameを管理する方法のバグです。
報告されたバグ: https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1276796