ZSH %m-Prompt-Escape funktioniert nicht wie dokumentiert unter Debian Linux

ZSH %m-Prompt-Escape funktioniert nicht wie dokumentiert unter Debian Linux

Auf der zshmiscManpage 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 %2min 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 -fauf 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 %mdarauf basiert, was Ihr System für den gethostnameSystemaufruf zurückgibt. Das ist, als würde man hostnameohne diese -fOption arbeiten.

Ich gehe davon aus, dasshostname ohne -fgibt 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$ "

verwandte Informationen