Рейтинг:5

Как добавить неразрывную строку в bash, начиная с конца моего левого текста PS1 и заканчивая правой стороной

флаг ru

У меня проблемы с обдумыванием этой маленькой проблемы

В основном я использую этот скрипт bash для PS1, потому что это круто:

PS1="\n \[\033[0;34м\]ââââââ\[\033[0;31м\]î²\[\033[ 0;37м\]\[\033[41м\] \u \[\033[0м\]\[\033[0;31м\]î°\[\033[0;34м\]ââ âââ\[\033[0;32м\]î²\[\033[0;30м\]\[\033[42м\] \w \[\033[0м \]\[\033[0;32m\]î° \n \[\033[0;34m\]â°ï \[\033[1;36m\]\$ \[\033[0m \]"

выглядит так:

Баш как Powerline

Что я хочу сделать, так это напечатать отметку времени справа со сплошной линией, соединяющей конец левой стороны с началом правой стороны текста, например:

Бен @ местный ---------------------------------------------12:00

Я пытался сделать это:

$(printf '%*s' $COLUMNS '-')

но это, очевидно, просто создает совершенно новую строку, заполненную тире.

Как мне получить значение того места, где остановился курсор, я вижу tput sc но я не понимаю, как использовать это в переменной? Затем распечатайте строки, оставив с правой стороны примерно 5 символов для времени.

Это мой первый опыт написания сценариев bash, так что простите меня за невежество.

Любая помощь приветствуется

Рейтинг:7
флаг cn

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

подсказка_обработчик () {
    местный A="$2[\A]"

    в то время как [[ $A =~ \[\x1b\[[0-9\;]*m\] ]]; делать
       А=${А//"${BASH_REMATCH}"}
    сделано

    А=${А@П} \
    A=$((СТОЛБЦЫ-${#A}))

    оценочная печать \
        -v A %.s {1..$A}

    PS1="$1$2${А}[\А]$3"
}

PROMPT_COMMAND='prompt_handler "\n" " \[\033[0;34m\]ââââââ\[\033[0;31m\]î²\ [\033[0;37м\]\[\033[41м\] \u \[\033[0м\]\[\033[0;31м\]î°\[\033[0;34м\] âââââ\[\033[0;32м\]î²\[\033[0;30м\]\[\033[42м\] \w \[ \033[0m\]\[\033[0;32m\]î°" "\n \[\033[0;34m\]â°ï \[\033[1;36m\]\$ \[\033[0m\]"'
terdon avatar
флаг cn
Это действительно здорово! Было бы полезно некоторое объяснение, поскольку вы используете различные функции bash, которые не будут известны многим. Например, мне пришлось искать `${A@P}`, чтобы узнать, что это специальный режим расширения, который заставляет переменную раскрываться, как если бы это была строка приглашения.

Ответить или комментировать

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