ubuntuusers.de

FQDN in Bash-prompt

Status: Gelöst | Ubuntu-Version: Server 16.04 (Xenial Xerus)
Antworten |

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6494

Hallo Ihr Spezialisten,

Ziel ist es, den FQDN in den Bash-Prompt (PS1) zu schreiben.

Aufgrund https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1276796 geht das nicht via \H , obwohl laut Manpage so vorgesehen.

Zwei Workarounds kenne ich:

  1. $(hostname --fqdn) in die PS-Zeile der bashrc schreiben

  2. den FQDN in die /etc/hosts schreiben

1. ruft halt den Befehl "ständig" oft auf

2. war wohl "früher" nicht empfohlen, ist mittlerweile aber "aufgeweicht" worden:

/etc/hostname  Historically  this  file  was  supposed to only contain the hostname and not the full canonical FQDN. Nowadays most software is able to cope with a full FQDN here. This file is read at boot time by the system initialization scripts to set the
       hostname.

Variante:

3. den FQDN via hostname --fqdn einmalig in eine Umgebungsvariable schreiben, die von der Bash ausgelesen wird. Sollte ja auch gehen. (Hab ich jetzt nicht getestet, fällt mir gerade erst ein)

Welche Variante wäre Eurer Meinung nach die Sauberste/Empfehlenswerteste?

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Hallo!

Ich verwende ein Script zur Anzeige des Akkustandes, alles andere ist bei mir "fix". Von den von dir angebotenen Möglichkeiten würde ich die letzte nutzen.

$HOSTNAME ist bereits vergeben.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13176

BillMaier schrieb:

3. den FQDN via hostname --fqdn einmalig in eine Umgebungsvariable schreiben, die von der Bash ausgelesen wird. Sollte ja auch gehen. (Hab ich jetzt nicht getestet, fällt mir gerade erst ein)

Welche Variante wäre Eurer Meinung nach die Sauberste/Empfehlenswerteste?

Du brauchst keine separate Variable: schreib den Hostnamen einfach mittels $(hostname --fqdn) in PS1, wenn Du es setzt.

BillMaier Team-Icon

Supporter
(Themenstarter)

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6494

rklm schrieb:

Du brauchst keine separate Variable: schreib den Hostnamen einfach mittels $(hostname --fqdn) in PS1, wenn Du es setzt.

Das wäre dann Variante 1

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13176

BillMaier schrieb:

rklm schrieb:

Du brauchst keine separate Variable: schreib den Hostnamen einfach mittels $(hostname --fqdn) in PS1, wenn Du es setzt.

Das wäre dann Variante 1

Nur, dass dies nicht stimmt:

BillMaier schrieb:

1. ruft halt den Befehl "ständig" oft auf

Das passiert nur, wenn eine neue interaktive Shell gestartet wird.

BillMaier Team-Icon

Supporter
(Themenstarter)

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6494

rklm schrieb:

Das passiert nur, wenn eine neue interaktive Shell gestartet wird.

Genau genommen passiert das jedes Mal, wenn der Prompt aufgerufen wird:

docker1.mbr.intern:~# set -x
+ set -x
++ hostname --fqdn
docker1.mbr.intern:~# echo hello
+ echo hello
hello
++ hostname --fqdn
docker1.mbr.intern:~# 

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13176

BillMaier schrieb:

rklm schrieb:

Das passiert nur, wenn eine neue interaktive Shell gestartet wird.

Genau genommen passiert das jedes Mal, wenn der Prompt aufgerufen wird:

Dann ist das nicht die Variante, die ich meine! Lies bitte noch einmal.

barcc

Avatar von barcc

Anmeldungsdatum:
13. Juli 2007

Beiträge: 696

Wohnort: Dortmund

Kommt darauf an, ob man ' oder " verwendet:

barcc:~$ PS1="$(date)"' \$ '
Mi 13. Dez 13:06:46 CET 2017 $ 
Mi 13. Dez 13:06:46 CET 2017 $ 
Mi 13. Dez 13:06:46 CET 2017 $ 
Mi 13. Dez 13:06:46 CET 2017 $ PS1='$(date)'' \$ '
Mi 13. Dez 13:06:56 CET 2017 $ 
Mi 13. Dez 13:06:57 CET 2017 $ 
Mi 13. Dez 13:06:58 CET 2017 $ 

BillMaier Team-Icon

Supporter
(Themenstarter)

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6494

rklm schrieb:

Du brauchst keine separate Variable: schreib den Hostnamen einfach mittels $(hostname --fqdn) in PS1, wenn Du es setzt.

Ich hab es mehrfach gelesen, finde es aber nicht eindeutig. Was meinst du mit "wenn du es setzt"? Beim "Provisioning" abfragen und damit in der .bashrc hard-coden? Geht natürlich auch, nur kann man dann die .bashrc nicht generisch als ganze versionieren.

BillMaier Team-Icon

Supporter
(Themenstarter)

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6494

barcc schrieb:

Kommt darauf an, ob man ' oder " verwendet:

Meine Zeile sieht so aus

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]$(hostname --fqdn)\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

Das Ergebnis ist wie oben beschrieben.

barcc

Avatar von barcc

Anmeldungsdatum:
13. Juli 2007

Beiträge: 696

Wohnort: Dortmund

BillMaier schrieb:

barcc schrieb:

Kommt darauf an, ob man ' oder " verwendet:

Meine Zeile sieht so aus

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]$(hostname --fqdn)\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

Das Ergebnis ist wie oben beschrieben.

Dann probier mal das:

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]'"$(hostname --fqdn)"'\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13176

BillMaier schrieb:

rklm schrieb:

Du brauchst keine separate Variable: schreib den Hostnamen einfach mittels $(hostname --fqdn) in PS1, wenn Du es setzt.

Ich hab es mehrfach gelesen, finde es aber nicht eindeutig. Was meinst du mit "wenn du es setzt"?

Da, wo Du eine Zuweisung an PS1 machst. Wo sonst setzt Du PS1?

Beim "Provisioning" abfragen und damit in der .bashrc hard-coden? Geht natürlich auch, nur kann man dann die .bashrc nicht generisch als ganze versionieren.

Nein. barcc hat es verstanden.

BillMaier Team-Icon

Supporter
(Themenstarter)

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6494

Ok, dann waren die '"' jetzt der Trick. Verstanden hab ich es nicht, aber es funktioniert. Vielen Dank Euch!

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13176

BillMaier schrieb:

Ok, dann waren die '"' jetzt der Trick. Verstanden hab ich es nicht, aber es funktioniert.

Schau doch mal hier.

BillMaier Team-Icon

Supporter
(Themenstarter)

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6494

Nach dem Artikel und meinem Vorwissen würde '$(hostname --fqdn)' überhaupt nicht ausgewertet, vermutlich muss das also im Kontext der PS-Variable verstanden werden (?)

Oder ich steh tatsächlich auf dem Schlauch.

Antworten |