Os recursos de controle de prompt do Bash são bastante estáticos. Se você quiser mais controle, você pode incluir variáveis no seu prompt; Verifique se você não desativou a promptvars
opção .
PS1='${PWD#"${PWD%/*/*}/"} \$ '
Observe as aspas simples: as expansões de variáveis devem acontecer no momento em que o prompt é exibido, não no momento em que a variável PS1
é definida.
Se você quiser mais controle sobre o que é exibido, você pode usar substituições de comando. Por exemplo, o snippet acima perde a abreviação ~
para o diretório inicial.
PS1='$(case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac; printf %s "$HPWD") \$ '
Este código é um pouco complicado, então, em vez de colocá-lo na variável PS1
, você pode usar o PROMPT_COMMAND
variable para executar o código para definir HPWD
e, em seguida, usar isso no seu prompt.
PROMPT_COMMAND='case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac'
PS1='$HPWD \$'
Como o prompt abreviado só é alterado em uma alteração de diretório, não é necessário recalculá-lo toda vez que um prompt é exibido. O Bash não fornece um gancho que é executado em uma alteração de diretório atual, mas você pode simule sobrescrevendo cd
e seus primos.
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 \$'
Note que você não precisa e não deve exportar PS1
, já que é uma configuração de shell, não uma variável de ambiente. Uma configuração bash PS1
não seria entendida por outras camadas.
P.S. Se você quiser uma experiência de shell interativa agradável, mude para zsh , onde todos esses (prompt %
expansions amplamente englobando tcsh's, chpwd
, etc.) são recursos nativos.
PS1='%2~ %# '