In tcsh habe ich die Vorgabe:
prompt [%m:%c3] %n%#
das gibt Eingabeaufforderungen wie:
[woehler:hacking/c/hello] ajcarr%
und
[woehler:~] ajcarr%
Mit anderen Worten, das aktuelle Verzeichnis und bis zu den nächsten beiden darüber im Pfad.
In ksh93 oder bash die Ersetzung von $HOME
von ~
ist einfach, ebenso wie das Extrahieren des Namens nur des aktuellen Verzeichnisses, aber ich muss noch einen Weg finden, den %c3
zu replizieren Verhalten von tcsh. Zur Zeit habe ich in ksh93:
[[email protected]] hello $
und
[[email protected]] ~ $
Hat jemand irgendwelche Vorschläge dazu?
Akzeptierte Antwort:
In ksh93
:
PS1='${PWD#${PWD%?/*/*/*}?/} $ '
share/doc/libnl-3-dev $ _
PS1='[${HOSTNAME%%.*}:${PWD#${PWD%?/*/*/*}?/}] $USER% '
[host:share/doc/libnl-3-dev] user% _
Wenn Sie möchten, dass es auch $HOME
ersetzt mit ~
, etwas fieseres wird benötigt:
PS1='$(d=${PWD/#$HOME/"~"};printf %s "${d#${d%?/*/*/*}?/}") $ '
~/w/maemo $ cd sb2-pathmaps
w/maemo/sb2-pathmaps $ _
PS1='$(d=${PWD/#$HOME/"~"};printf %s "[${HOSTNAME%%.*}:${d#${d%?/*/*/*}?/}]") $USER% '
[host:w/maemo/sb2-pathmaps] user% _
All dies sollte auch in bash
funktionieren , obwohl bash
hat seine eigenen Prompt-Escapes (z. B. h
für ${HOSTNAME%%.*}
) und Pfadverkürzungsmechanismus (mit PROMPT_DIRTRIM
).
Außerdem wird die fiesere Variante wirklich fies, weil bash
, im Gegensatz zu ksh93
, wird fork()
ein separater Prozess für jeden $(...; printf ...)
Befehlsersetzung, auch wenn sie nur eingebaute Elemente enthält. Dies gilt auch für pdksh
abgeleitete Shells, wie mksh
.
zsh
hat Prompt-Escapes ziemlich ähnlich, aber nicht identisch mit tcsh
:
zsh$ PS1='[%m:%3c] %n%# '
[host:share/doc/libnl-3-dev] user% _
Hinweis:
Der $HOSTNAME
Variable ist nicht standardmäßig in ksh93
gesetzt; stattdessen könnten Sie den uname
verwenden builtin (nach Aktivierung mit PATH=/opt/ast/bin:$PATH
; der /opt/ast/bin
Pfad muss nicht existieren):
PS1='$(d=${PWD/#$HOME/"~"};h=$(uname -n); printf %s "[${h%%.*}:${d#${d%?/*/*/*}?/}]") $USER% '
Im Gegensatz zum h
Escape in Bash oder %m
Escape in zsh
oder tcsh
das wird Verfolgen Sie die Änderungen des Hostnamens.