Atualize as variáveis ​​​​'alteradas' toda vez que o PS1 for chamado, ou seja, a cada novo prompt

Atualize as variáveis ​​​​'alteradas' toda vez que o PS1 for chamado, ou seja, a cada novo prompt

A razão pela qual preciso fazer isso é ter variáveis ​​de 'atualização' no meu PS1. Eu gostaria que meu prompt se estendesse por toda a largura do terminal, sem enrolar ou descer para uma nova linha. Para isso, já encontrei uma maneira de fazê-lo funcionar, mas esse método exige que eu recarregue o bash todas as vezes. Aqui está como eu gostaria que fosse:

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

Depois disso, quando eu fizer cd em um novo diretório, ficará assim:

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

Mas quando eu corro

exec bash

ele alterará com sucesso todos os valores e ficará assim:

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

Então, estou procurando uma maneira de incorporar a alteração de variáveis ​​em minha variável PS1, que eu gostaria de atualizar sempre que um novo prompt for chamado. Esta é a aparência do meu .bashrc no momento:

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

Também tentei colocar as variáveis ​​em um arquivo de script de shell separado e executá-lo no meu PS1, da seguinte maneira:

#/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)

Responder1

suas variáveis ​​são avaliadas apenas na primeira vez, você deve colocá-las dentro do ps1 para serem tratadas literalmente na primeira vez e serem avaliadas após a execução do comando.

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

você pode alterar apenas 6 se adicionou coisas ao ps1

informação relacionada