Обновлять «изменяющиеся» переменные каждый раз при вызове PS1, т.е. при каждом новом запросе

Обновлять «изменяющиеся» переменные каждый раз при вызове PS1, т.е. при каждом новом запросе

Причина, по которой мне нужно это сделать, заключается в том, что в моем PS1 должны быть «обновляемые» переменные. Я бы хотел, чтобы приглашение занимало всю ширину терминала, не переносясь и не переходя на новую строку. Для этого я уже нашел способ заставить его работать, но этот метод требует от меня перезагрузки bash каждый раз. Вот как я хочу, чтобы это выглядело:

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

После этого, когда я перейду в новый каталог, он будет выглядеть так:

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

Но когда я затем бегу

exec bash

он успешно изменит все значения и будет выглядеть так:

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

Поэтому я ищу способ включить изменяющиеся переменные в мою переменную PS1, которую я хотел бы обновлять каждый раз, когда вызывается новая подсказка. Вот как выглядит мой .bashrc на данный момент:

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

Я также попробовал поместить переменные в отдельный файл скрипта оболочки и запустить его на PS1, как показано ниже:

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

решение1

Ваши переменные оцениваются только в первый раз, вы должны поместить их в ps1, чтобы они были обработаны буквально в первый раз и оценены после выполнения команды.

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

вы можете изменить только 6, если вы добавили что-то в ps1

Связанный контент