Bash prompt di Ubuntu - FQDN (\ H) sama dengan hostname (\ h)

14

Kami memiliki lingkungan terpisah di tempat kerja saya untuk pengembangan, pengujian, integrasi, dan pementasan.

Di dalam envs tersebut, kami telah membebani nama host dalam DNS - misalnya di lingkungan dev, mesin web utama disebut web1.dev.example.com, dan di lingkungan pengujian, mesin web primer adalah web1.test.example.com.

Untuk membedakan antara mesin di lingkungan yang berbeda, saya ingin menyesuaikan permintaan bash untuk menampilkan FQDN daripada hanya nama host. Baik dan bagus; Aku harus bisa menggantikan \hdengan \Hdi $PS1, kan? Hmm. Mereka menunjukkan hal yang sama persis.

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: ~$ 

Di /etc/hostname, saya hanya punya nama host ( web1). hostnamedan hostname -fkeduanya mengembalikan hasil yang benar ("web1" dan "web1.test.example.com",), dan saya mendapatkan entri yang benar di /etc/hosts.

Apa yang menyebabkannya?

Ini adalah host Ubuntu 10,04, jika itu membuat perbedaan.

Ben Williams
sumber

Jawaban:

18

Coba gunakan panggilan eksplisit hostname -funtuk mendapatkan fqdn sistem

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

misalnya

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

EDIT:

Penelitian lebih lanjut menunjukkan bahwa isi /etc/hostname(Ubuntu) dan /etc/sysconfig/network(CentOS) relevan. Jika FQDN ada dalam file maka \Hberfungsi dengan benar.

Halaman hostname (1) untuk Ubuntu tidak mengatakan bahwa Anda tidak harus meletakkan FQDN di / etc / hostname tetapi tidak memberikan alasan mengapa.

Iain
sumber
Itu agak jelek :( Tapi itu berhasil. Saya mungkin membiarkan ini terbuka sedikit lebih lama, akan sangat menyenangkan memiliki perbaikan "bersih".
Ben Williams
Tampaknya ini terkait dengan debian / ubuntu. Ini berfungsi seperti yang diharapkan dalam centos.
user9517
1
Ya, itu pasti masalah Ubuntu. Saya akhirnya menggunakan solusi yang disarankan Anda; Saya benar-benar harus melaporkan ini sebagai bug terhadap Bash di Ubuntu.
Ben Williams
@BenWilliams: jawaban yang diperbarui dengan apa yang seharusnya membuatnya tidak terlalu jelek.
user9517
Saya juga menemukan ambiguitas yang sama dalam dokumen pengaturan hostname Ubuntu. Tidak yakin bagaimana mengatasinya.
Dogweather
4

Ada kegilaan gila tentang nama host, pendek dan panjang, dan melakukannya dengan benar sepanjang waktu itu sulit - jadi saya menyerah dan membuat semuanya menggunakan FQDN sebagai nama host ...

Saya melakukan hal yang sama seperti Anda di lingkungan saya, tetapi saya menebang FQDN di prompt karena saya tahu situs apa yang saya gunakan, dan itu menghemat ruang. Saya juga memberi kode warna pada prompt saya berdasarkan lingkungan jadi saya mendapat peringatan yang lebih baik ketika saya melakukan sesuatu di suatu tempat "penting". Saya juga memisahkan path dari yang lain, agar mudah menyalin-pasta pwd. Cuplikan dari stok saya /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

Dan, sejauh "kejelekan" terjadi, siapa yang peduli seperti apa kode untuk menampilkan prompt? Lagipula, ini hanya kode tulis.

womble
sumber
1
+1 untuk penggunaan warna.
Saad Masood