Die Funktionen für die schnelle Steuerung von Bash sind eher statisch. Wenn Sie mehr Kontrolle wünschen, können Sie Variablen in Ihre Eingabeaufforderung aufnehmen. Stellen Sie sicher, dass Sie die promptvars
Option nicht deaktiviert haben .
PS1='${PWD#"${PWD%/*/*}/"} \$ '
Beachten Sie die einfachen Anführungszeichen: Die Variablenerweiterungen müssen zum Zeitpunkt der Anzeige der Eingabeaufforderung und nicht zum Zeitpunkt der Anzeige der Eingabeaufforderung erfolgen PS1
Definition Variablen.
Wenn Sie mehr Kontrolle darüber haben möchten, was angezeigt wird, können Sie Befehlsersetzungen verwenden. Das obige Snippet verliert beispielsweise die ~
Abkürzung für das Ausgangsverzeichnis.
PS1='$(case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac; printf %s "$HPWD") \$ '
Dieser Code ist recht umständlich, so , anstatt sie in den von kleben PS1
Variable, können Sie die verwenden können , PROMPT_COMMAND
variabel zu laufen Code einzustellen HPWD
und dann verwenden , die in Ihrem prompt.
PROMPT_COMMAND='case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac'
PS1='$HPWD \$'
Da sich die verkürzte Eingabeaufforderung nur bei einer Verzeichnisänderung geändert hat, müssen Sie sie nicht jedes Mal neu berechnen, wenn eine Eingabeaufforderung angezeigt wird. Bash bietet keinen Hook, der bei einem aktuellen Verzeichniswechsel ausgeführt wird, aber Sie können ihn simulieren, indem Sie ihncd
und seine Cousins überschreiben .
cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
chpwd () {
case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac
}
PS1='$HPWD \$'
Beachten Sie, dass Sie nicht exportieren müssen und sollten PS1
, da es sich um eine Shell-Einstellung und nicht um eine Umgebungsvariable handelt. Eine Bash- PS1
Einstellung würde von anderen Shells nicht verstanden.
PS Wenn Sie eine schöne interaktive Shell-Erfahrung wünschen, wechseln Sie zu zsh , wobei alle diese Funktionen (Eingabeaufforderungserweiterungen, die %
weitgehend tcshs umfassen chpwd
, usw.) native Funktionen sind.
PS1='%2~ %# '
PS1='\w \$'; PROMPT_DIRTRIM=2
sollte man das bash-Äquivalent geben, aber das funktioniert auf meinem System nicht richtig.