Bash-Eingabeaufforderung unter Ubuntu - FQDN (\ H) wie Hostname (\ h)

14

An meinem Arbeitsplatz gibt es separate Umgebungen für Entwicklung, Test, Integration und Bereitstellung.

Innerhalb dieser Umgebungen haben wir die Hostnamen in DNS überlastet - z. B. wird in der Entwicklungsumgebung der primäre Webcomputer aufgerufen web1.dev.example.comund in der Testumgebung der primäre Webcomputer web1.test.example.com.

Um zwischen Computern in den verschiedenen Umgebungen zu unterscheiden, möchte ich die Bash-Eingabeaufforderungen so anpassen, dass der vollqualifizierte Domänenname und nicht nur der Hostname angezeigt wird. Schön und gut; Ich habe ersetzen können \hmit \Hin $PS1, nicht wahr? Hmm. Sie zeigen genau dasselbe.

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

In /etc/hostnamehabe ich nur den Hostnamen ( web1). hostnameund hostname -fbeide geben die korrekten Ergebnisse zurück ("web1" bzw. "web1.test.example.com"), und ich habe die korrekten Einträge in /etc/hosts.

Was gibt?

Dies sind Ubuntu 10.04-Hosts, wenn das einen Unterschied macht.

Ben Williams
quelle

Antworten:

18

Verwenden Sie einen expliziten Aufruf hostname -f, um die FQDN des Systems abzurufen

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

z.B

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

BEARBEITEN:

Weitere Untersuchungen zeigen, dass die Inhalte von /etc/hostname(Ubuntu) und /etc/sysconfig/network(CentOS) relevant sind. Wenn der vollqualifizierte Domänenname in der Datei enthalten ist, \Hfunktioniert die ordnungsgemäß.

Die Manpage hostname (1) für Ubuntu besagt zwar, dass Sie den FQDN nicht in / etc / hostname einfügen sollten, gibt aber keinen Grund an, warum.

Iain
quelle
Das ist ein bisschen hässlich :( Aber es funktioniert. Vielleicht lasse ich das länger offen, es wäre wirklich schön, eine "saubere" Lösung zu haben.
Ben Williams
Dies scheint mit Debian / Ubuntu zu tun zu haben. Es funktioniert wie erwartet in Centos.
User9517
1
Ja, es ist definitiv ein Ubuntu-Problem. Ich habe am Ende Ihre vorgeschlagene Lösung verwendet. Ich sollte das wirklich als Bug gegen Bash in Ubuntu melden.
Ben Williams
@BenWilliams: aktualisierte Antwort mit was sollte es weniger flüchtig machen.
User9517
Dieselbe Mehrdeutigkeit habe ich auch in Ubuntus Dokumenten zum Festlegen von Hostnamen festgestellt. Ich bin mir nicht sicher, wie ich es beheben soll.
Dogweather
4

Es gibt eine verrückte Menge an Hostnamen, kurz und lang, und es ist immer schwierig , alles richtig zu machen - also gebe ich einfach auf und lasse alles den FQDN als Hostnamen verwenden ...

Ich mache dasselbe wie Sie in meinen Umgebungen, aber ich zerlege die FQDNs in der Eingabeaufforderung, weil ich weiß, auf welcher Site ich mich befinde , und das spart Platz. Ich färbe meine Eingabeaufforderung auch nach der Umgebung, damit ich besser gewarnt werde, wenn ich etwas "Wichtiges" tue. Ich trenne den Pfad auch durch Leerzeichen von allem anderen, um das Kopieren von Pasta pwd zu vereinfachen. Ein Ausschnitt aus meinem Bestand /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

Und was "Hässlichkeit" betrifft, wen interessiert es, wie der Code für die Anzeige der Eingabeaufforderung aussieht? Es ist sowieso die meiste Zeit schreibgeschützter Code.

womble
quelle
+1 für die Farbverwendung.
Saad Masood