Le funzionalità di controllo rapido di Bash sono piuttosto statiche. Se si desidera un maggiore controllo, è possibile includere variabili nel prompt; assicurati di non aver disattivato l' promptvars
opzione .
PS1='${PWD#"${PWD%/*/*}/"} \$ '
Nota le virgolette singole: le espansioni delle variabili devono avvenire nel momento in cui viene visualizzato il prompt, non nel momento in cui PS1
viene definita la variabile.
Se si desidera un maggiore controllo su ciò che viene visualizzato, è possibile utilizzare le sostituzioni di comandi. Ad esempio, lo snippet sopra perde l' ~
abbreviazione della home directory.
PS1='$(case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac; printf %s "$HPWD") \$ '
Questo codice è piuttosto ingombrante, quindi invece di inserirlo nella PS1
variabile, è possibile utilizzare la PROMPT_COMMAND
variabile per eseguire il codice per impostare HPWD
e quindi utilizzarlo nel prompt.
PROMPT_COMMAND='case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac'
PS1='$HPWD \$'
Poiché il prompt abbreviato è cambiato solo in una modifica della directory, non è necessario ricalcolarlo ogni volta che viene visualizzato un prompt. Bash non fornisce un hook che gira su un cambio di directory corrente, ma puoi simularlo eseguendo l'override cd
e i suoi cugini.
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 \$'
Si noti che non è necessario e non è necessario esportare PS1
, poiché si tratta di un'impostazione della shell, non di una variabile di ambiente. Un'impostazione bash PS1
non sarebbe stata compresa da altre shell.
PS Se vuoi una piacevole esperienza interattiva della shell, passa a zsh , dove tutte queste (estensioni rapide che %
comprendono in gran parte tcsh chpwd
, ecc.) Sono funzionalità native.
PS1='%2~ %# '
PS1='\w \$'; PROMPT_DIRTRIM=2
dovrebbe darti l'equivalente bash, ma questo non funziona correttamente sul mio sistema.