Actualice las variables 'cambiantes' cada vez que se llame a PS1, es decir, cada nuevo mensaje

Actualice las variables 'cambiantes' cada vez que se llame a PS1, es decir, cada nuevo mensaje

La razón por la que necesito poder hacer esto es para tener variables de "actualización" en mi PS1. Me gustaría que mi mensaje se extendiera a lo largo de todo el ancho de la terminal, sin enrollarse ni bajar a una nueva línea. Para esto, ya encontré una manera de hacerlo funcionar, pero este método requiere que recargue bash cada vez. Así es como me gustaría que se viera:

|me::awesome| --------------------------------------------------------- ~/.config/awesome
$

Después de eso, cuando acceda a un nuevo directorio, se verá así:

|me::themes| -------------------------------------------------------------------------
------ ~/.config/awesome/themes
$

Pero cuando luego corro

exec bash

cambiará con éxito todos los valores y se verá así:

|me::themes| --------------------------------------------------- ~/.config/awesome/themes
$

Así que estoy buscando una manera de incorporar variables cambiantes en mi variable PS1, que me gustaría actualizar cada vez que se llama a un nuevo mensaje. Así es como se ve mi .bashrc en este momento:

mytest=$PWD
mynext="$(basename $PWD)"
mylength=$((${#mytest}+${#mynext}))
length=$(($mylength+6))
PS1='|me::\W| $(printf "\\u2500%.0s" $(seq $length $(tput cols))) \w\n\$'

También intenté poner las variables en un archivo de script de shell separado y ejecutarlo dentro de mi PS1, de la siguiente manera:

#/home/me/.PS1.sh
mytest=$PWD
mynext="$(basename $PWD)"
mylength=$((${#mytest}+${#mynext}))
length=$(($mylength+6))
echo "|me::\W| $(printf "\\u2500%.0s" $(seq $length $(tput cols))) \w\n\$"

#/home/me/.bashrc
PS1=$(/home/me/.PS1.sh)

Respuesta1

sus variables se evalúan solo la primera vez, debe colocarlas dentro de ps1 para que sean tratadas literalmente por primera vez y evaluadas después de la ejecución del comando.

PS1='|me::\W| $( mytest=$PWD;mynext="${PWD##*/}";  mylength=$((${#mytest}+${#mynext})) ; length=$(($mylength+6)) ; printf "\\u2500%.0s" $(seq $length $(tput cols))) \w\n\$'

puedes cambiar solo 6 si agregaste cosas a ps1

información relacionada