Las características de control rápido de Bash son bastante estáticas. Si desea más control, puede incluir variables en su solicitud; asegúrese de no haber desactivado la promptvars
opción .
PS1='${PWD#"${PWD%/*/*}/"} \$ '
Tenga en cuenta las comillas simples: las expansiones de las variables deben ocurrir en el momento en que se muestra la solicitud, no en el momento en PS1
que se define la variable.
Si desea tener más control sobre lo que se muestra, puede usar sustituciones de comandos. Por ejemplo, el fragmento anterior pierde la ~
abreviatura del directorio de inicio.
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 es bastante engorroso, por lo que en lugar de pegarlo en la PS1
variable, puede usar la PROMPT_COMMAND
variable para ejecutar el código para configurarlo HPWD
y luego usarlo en su solicitud.
PROMPT_COMMAND='case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac'
PS1='$HPWD \$'
Dado que la solicitud abreviada solo cambió en un cambio de directorio, no necesita volver a calcularla cada vez que se muestra una solicitud. Bash no proporciona un enlace que se ejecute en un cambio de directorio actual, pero puede simularlo anulando cd
y sus 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 \$'
Tenga en cuenta que no necesita y no debe exportar PS1
, ya que es una configuración de shell, no una variable de entorno. Una PS1
configuración de bash no sería entendida por otros proyectiles.
PD: si desea una buena experiencia de shell interactivo, cambie a zsh , donde todas estas ( %
expansiones rápidas que abarcan en gran medida tcsh chpwd
, etc.) son características nativas.
PS1='%2~ %# '
PS1='\w \$'; PROMPT_DIRTRIM=2
debería darte el equivalente de bash, pero eso no funciona correctamente en mi sistema.