Auf der zshmisc
Manpage meiner neuen Debian Squeeze-Installation heißt es unter SIMPLE PROMPT ESCAPES
:
%m
The hostname up to the first `.'. An integer may follow the '%' to specify how
many components of the hostname are desired. With a negative integer, trailing
components of the hostname are shown.
Wenn ich es %2m
in meine Eingabeaufforderung einbeziehe, sehe ich ein unterschiedliches Verhalten zwischen OSX und Linux.
Unter OSX (10.7.3) mit zsh 4.3.11 verhält sich die Eingabeaufforderung wie erwartet und zeigt die beiden führenden Komponenten des System-Hostnamens an.
Unter Debian mit zsh 4.3.10 wird in der Eingabeaufforderung immer noch nur der reine Hostname angezeigt. hostname -f
auf diesem System bestätigt, dass der vollständige Hostname korrekt eingestellt ist. Beachten Sie auch, dass auf der Manpage für diese zsh-Version steht, dass %2m unterstützt werden sollte.
Hat jemand Vorschläge, wo man mit dem Debuggen beginnen kann?
Antwort1
Ein kurzer Blick auf zsh'sQuellcode zur Verarbeitung von Eingabeaufforderungenschlägt vor, dass dies %m
darauf basiert, was Ihr System für den gethostname
Systemaufruf zurückgibt. Das ist, als würde man hostname
ohne diese -f
Option arbeiten.
Ich gehe davon aus, dasshostname
ohne -f
gibt Ihren bloßen Hostnamen auf Ihrem Debian-System zurück?
Sie könnten versuchen, Ihren Hostnamen so zu ändern, dass er den Domänennamen enthält. Das DebianHowTo/ChangeHostname-Dokumentesollte dabei helfen. Aber vielleicht gehen einige Debian-Tools davon aus, dass Ihr Hostname den Domänennamen nicht enthält, also ist das vielleicht keine so gute Idee.
Es ist möglicherweise sinnvoller, einfach die Befehlsersetzung zu verwenden.
Legen Sie zunächst die Option PROMPT_SUBST fest
setopt PROMPT_SUBST
Anschließend können Sie einen beliebigen Befehl ausführen und seine Ausgabe wie folgt in die Eingabeaufforderung einfügen:
PS1='$(hostname -f)$ '
um nur die ersten Teile des Hostnamens zu erhalten, können Sie verwendencut
, z.B
PS1='$(hostname -f | cut -f 1-2 -d .)$ '
Da sich Ihr Hostname nicht ändern sollte, können Sie auch etwas effizienter sein, indem Sie den Befehl nur einmal ausführen und in einer Variablen speichern und dann die Variable verwenden, z. B.
HOSTANDSUBDOMAIN="$(hostname -f | cut -f 1-2 -d .)"
PS1="$HOSTANDSUBDOMAIN$ "