LINUX.ORG.RU

Текущая строка bash PS1

 , , , ,


1

8

Есть ли способ в PS1 (подсветить или сделать моргающей) только строку в которой ты сейчас будешь делать ввод , и чтобы предыдущие строки с содержание \u@\h:\w (не подсвечивались или не моргали).

К примеру если поставить PS1=«\e[5m\u@\h\[0:\w» То предыдущие вводы тоже станут моргать, а нужно чтобы текущая строка для ввода моргала.

Поидее в BASH так нельзя. Сейчас понабегут всякие предлагать другие shell'ы.

Но подпишусь. Если кто-то всё-таки подскажет что-то, то это решит другую мою задачу: real-time индикаторы в PS1.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)

Подсвечивать строку в PS1, написать хук, который будет очищать "цвет" перед запуском программы. Таким образом будет подсвечена только строка ввода.

Как писать хуки в bash я не знаю, поэтому копай сам.

r3lgar ★★★★★
()
Ответ на: комментарий от r3lgar

Подсвечивать строку в PS1, написать хук, который будет очищать «цвет» перед запуском программы.

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

Zmicier ★★★★★
()
Ответ на: комментарий от Zmicier

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

Чо-чо-чо? Чтобы запустить введённую строку на исполнение, нужно нажать Enter, ^J или ^M, что в любом случае переведёт каретку и вернёт её в начало строки. Но так как перед исполнением самой строки будет вызван хук, очищающий цвет, то строка со stdout/stderr запускаемой строки (или в худшем случае ошибки шелла) будет уже не цветной, и начинаться с самого начала следующей за промптом строки (при условии, что у тебя в хуке нет мусора, естественно).

r3lgar ★★★★★
()

А вообще стесняюсь спросить — зачем это нужно? Если вы хотите сделать более заметным то место, куда можно что-то вводить, то общепринятое решение — покрасить в яркий цвет / заставить мерцать *курсор*. Любой нормальный эмулятор терминала это позволяет.

Zmicier ★★★★★
()

man trap

man PROMPT_COMMAND

pS
()
Ответ на: комментарий от Zmicier

Люблю извращения) Не по теме тогда , вот такой у меня PS1

PS1="\`if [ \$? = 0 ]; then echo \[\e[32m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\`${debian_chroot:+($debian_chroot)}\[\0    33[01;32m\]\e[0;93m\\n#-----------------------------\e[37m(\H)\e[0m----\e[1m\#-[\d]\e[0m \n \e[22;33m\t\e[0m \e[0;93mj=\j\e[0m \e[1;3    2m\u\e[0m@\e[1;36m\h\e[0m: \e[1;94m\w\e[0m \n \n \e[1;92m\$\e[0m "

Собственно при прокрутке назад (up arrow) , постоянно спереди остаются 11 символов , можно ли как то от них избавиться? https://yadi.sk/i/3rA9U9Jl3KcFST

sanekmihailow
() автор топика
Ответ на: комментарий от sanekmihailow

нашел ответ https://www.linux.org.ru/forum/general/11440369 рабочий вариант

PS1="\`if [ \$? = 0 ]; then echo \[\e[32m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\`${debian_chroot:+($debian_chroot)}\[\0
33[01;32m\]\[\e[0;93m\\n#-----------------------------\]\[\e[37m(\H)\e[0m----\]\[\e[1m\#-[\d]\e[0m\] \n \[\e[22;33m\t\e[0m\] \[\e[0;9
3mj=\j\e[0m\] \[\e[1;32m\u\e[0m\]@\[\e[1;36m\h\e[0m\]: \[\e[1;94m\w\e[0m\] \n \n \[\e[1;92m\$\e[0m\] " 

sanekmihailow
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.