Os recursos de controle de prompt do Bash são bastante estáticos. Se você quiser mais controle, poderá incluir variáveis em seu prompt; verifique se você não desativou a promptvars
opção .
PS1='${PWD#"${PWD%/*/*}/"} \$ '
Observe as aspas simples: as expansões da variável devem ocorrer no momento em que o prompt é exibido, não no momento em que a PS1
variável é definida.
Se você deseja ter mais controle sobre o que é exibido, pode usar substituições de comando. Por exemplo, o trecho acima perde a ~
abreviação do 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 furá-lo para a PS1
variável, você pode usar a PROMPT_COMMAND
variável para executar o código de conjunto HPWD
e, em seguida, usar isso em 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 reduzido só foi alterado em uma alteração de diretório, você não precisa recalculá-lo sempre que um prompt é exibido. O Bash não fornece um gancho que é executado em uma alteração de diretório atual, mas você pode simulá-lo substituindo cd
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 \$'
Observe que você não precisa exportar e não deve exportar PS1
, pois é uma configuração de shell, não uma variável de ambiente. Uma PS1
configuração do bash não seria entendida por outras conchas.
PS Se você deseja uma boa experiência de shell interativa, mude para zsh , onde todos esses ( %
expansões rápidas que abrangem amplamente o tcsh chpwd
, etc.) são recursos nativos.
PS1='%2~ %# '
PS1='\w \$'; PROMPT_DIRTRIM=2
deve fornecer o equivalente ao bash, mas isso não funciona corretamente no meu sistema.