In ksh93
:
PS1='${PWD#${PWD%?/*/*/*}?/} \$ '
share/doc/libnl-3-dev $ _
PS1='[${HOSTNAME%%.*}:${PWD#${PWD%?/*/*/*}?/}] $USER% '
[host:share/doc/libnl-3-dev] user% _
Wenn Sie es wollen , auch zu ersetzen , $HOME
mit ~
, ist etwas fieser 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 funktionieren bash
, bash
hat jedoch seine eigenen Eingabeaufforderungen (z. B. \h
für ${HOSTNAME%%.*}
) und einen Pfadverkürzungsmechanismus (mit PROMPT_DIRTRIM
).
Außerdem wird die schlimmere Variante wirklich böse sein, weil bash
, im Gegensatz zu ksh93
, wird fork()
ein separater Prozess für jeden $(...; printf ...)
Befehl Substitution, auch wenn es nur builtins enthält. Dies gilt auch für pdksh
abgeleitete Muscheln wie mksh
.
zsh
hat prompt Escape ganz ähnlich, aber nicht identisch mit tcsh
:
zsh$ PS1='[%m:%3c] %n%# '
[host:share/doc/libnl-3-dev] user% _
Hinweis:
Die $HOSTNAME
Variable ist nicht standardmäßig in festgelegt ksh93
. stattdessen können Sie das uname
eingebaute verwenden (nachdem Sie es mit aktiviert haben 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% '
Anders als bei der \h
Flucht in bash oder %m
Flucht in zsh
oder tcsh
dies wird die Hostnamen Änderungen verfolgen.