
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