
Aquí está una parte de mi .bashrc
archivo:
echo_pwd () {
echo `pwd`
}
export echo_pwd="`echo_pwd`/"
Creé una nueva función echo_pwd
que imprime la ruta del directorio actual y una nueva variable de entorno que contiene el directorio actual seguido de una barra diagonal. Por lo tanto, puedo usar mi variable de entorno en la línea de comando (como $PWD
).
Sin embargo, esta variable de entorno no se expande correctamente y siempre hace referencia a mi directorio de inicio:
~/Documents$ env | grep echo_pwd
echo_pwd=/home/pierre/
~/Documents$
¿Qué puedo hacer para que mi variable de entorno se expanda correctamente?
Nota: este es obviamente un ejemplo ficticio. En mi caso de uso específico, echo_pwd
es una función mucho más compleja.
Respuesta1
Probablemente solo esté ejecutando la función y estableciendo el valor de su variable una vez.
Para actualizar automáticamente el valor de la variable cada vez que use cd
, puede anular el valor integrado del shell cd
de esta manera:
cd () {
builtin cd "$@"
echo_pwd=$( echo_pwd )/
}
Esto llamaría al integrado cd
con cualquier argumento que le haya dado a la cd
función y luego actualizaría el valor de su variable (tenga en cuenta que export
no es necesario si ya lo ha exportado a otro lugar, si es que es necesario exportarlo).
La configuración completa podría verse así
echo_pwd () {
printf '%s\n' "$PWD" # or just: pwd
}
export echo_pwd="$( echo_pwd )/"
cd () {
builtin cd "$@"
echo_pwd=$( echo_pwd )/
}
he optado porusandoprintf
con $PWD
en lugar de llamar a la pwd
utilidad, y también estoyusando $(...)
para sustituciones de comandos.
Respuesta2
En export echo_pwd="`echo_pwd`/"
, la sustitución del comando se realiza solo una vez, cuando se establece la variable.
Si necesita actualizar el valor de la variable, deberá configurarlo nuevamente.
En bash interactivo, puedes usarPROMPT_COMMAND
, que se ejecuta cada vez que se imprime el mensaje:
$ PROMPT_COMMAND='echo_pwd="`echo_pwd`/"'
$ cd bar/
$ echo $echo_pwd/
/tmp/foo/bar//
$ cd baz
$ echo $echo_pwd
/tmp/foo/bar/baz/