Monit Bash na Ubuntu - FQDN (\ H) taki sam jak nazwa hosta (\ h)

14

W moim miejscu pracy mamy oddzielne środowiska do programowania, testowania, integracji i inscenizacji.

W tych środowiskach przeciążiliśmy nazwy hostów w DNS - np. W środowisku deweloperskim nazywana jest podstawowa maszyna internetowa web1.dev.example.com, aw środowisku testowym podstawowa maszyna internetowa web1.test.example.com.

Aby odróżnić komputery w różnych środowiskach, chcę dostosować monity bash, aby wyświetlały nazwę FQDN, a nie tylko nazwę hosta. Dobrze i dobrze; Byłbym w stanie wymienić \hz \Hw $PS1, prawda? Hmm Pokazują dokładnie to samo.

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

W /etc/hostname, mam tylko nazwę hosta ( web1). hostnamei hostname -foba zwracają prawidłowe wyniki (odpowiednio „web1” i „web1.test.example.com”), i mam prawidłowe wpisy w /etc/hosts.

Co daje?

Są to hosty Ubuntu 10.04, jeśli to robi różnicę.

Ben Williams
źródło

Odpowiedzi:

18

Spróbuj użyć jawnego wywołania, hostname -faby uzyskać fqdn systemu

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

na przykład

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

EDYTOWAĆ:

Dalsze badania pokazują, że zawartość /etc/hostname(Ubuntu) i /etc/sysconfig/network(CentOS) jest istotna. Jeśli nazwa FQDN znajduje się w pliku, to \Hdziała poprawnie.

Strona podręcznika hostname (1) dla Ubuntu mówi jednak, że nie powinieneś umieszczać nazwy FQDN w pliku / etc / hostname, ale nie podaje żadnego powodu.

Iain
źródło
To trochę brzydkie :( Ale to działa. Mogę zostawić to otwarte na dłużej, byłoby naprawdę miło mieć „czystą” poprawkę.
Ben Williams
Wydaje się, że jest to związane z debian / ubuntu. Działa zgodnie z oczekiwaniami w centach.
user9517,
1
Tak, to zdecydowanie problem z Ubuntu. Skończyło się na twoim sugerowanym rozwiązaniu; Naprawdę powinienem zgłosić to jako błąd przeciwko Bashowi w Ubuntu.
Ben Williams,
@BenWilliams: zaktualizowano odpowiedź z tym, co powinno sprawić, że będzie mniej niezręcznie.
user9517,
Znalazłem również tę dwuznaczność w dokumentach określających nazwy hostów Ubuntu. Nie jestem pewien, jak to rozwiązać.
Dogweather
4

Nazwy hostów, zwięzłe i długie, są niesamowicie szalone, a poprawianie ich przez cały czas jest trudne - więc po prostu poddaję się i używam nazwy FQDN jako nazwy hosta ...

Robię to samo, co ty w moich środowiskach, ale przerywam nazwy FQDN w wierszu polecenia, ponieważ wiem, na której stronie się znajduję , i to oszczędza miejsce. Podpowiadam też kolorami moje podpowiedzi w oparciu o środowisko, więc lepiej ostrzegam, gdy robię coś „ważnego”. Oddzielam też spację ścieżką od wszystkiego innego, aby ułatwić kopiowanie makaronu pwd. Fragment z mojego zasobu /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

A jeśli chodzi o „brzydotę”, kogo obchodzi, jak wygląda kod wyświetlający monit? W każdym razie jest to kod tylko do zapisu.

womble
źródło
1
+1 za użycie koloru.
Saad Masood,