Довгі рядки перекриваються у підказці Bash PS1


13

Я налаштував привабливий дворядковий PS1баш-рядок із зазначенням імені сервера, часу, імені користувача та інших корисних змінних.

PS1="\n\[\033[1;34m\]\342\226\210\342\226\210 \u @ $SERVER_NAME""$BBlue"" \w""$Color_Off  \n\[\033[0;36m\]\342\226\210\342\226\210 \d \t $ \[\033[0;39m\]"

введіть тут опис зображення

Повне джерело Github тут .

Проблема полягає в тому, що довгі рядки часто обмотуються навколо себе, це означає, що новий рядок перекриває попередній.

Проблема непослідовна: деякі рядки обмотані правильно, інші - ні.

Будь-яка ідея, як це виправити?

Відповіді:


16

Ось мій модний дворядковий PS1 для підказки bash.

PS1

\[\e[1;32m\]\H\[\e[0m\] :: \[\e[1;30m\]\d\[\e[0m\] \@ :: \[\e[1;33m\]\w\n\[\e[1;34m\]\u $ \[\033[0m\]

Отже ось що я зробив. Якби це був мій колір:

\e[1;32m

Я змінив його на:

\[\e[1;32m\]

По суті, потрібно укласти його:

\[$mycolor\]

Оформити цю відповідь .


+1 Дякую Як не дивно, це, здається, не працює на mac.
Адам Матан

Ти рятівник життя! Щодо mac, Адам. Це, швидше за все, пов’язано з кількістю колонок. Спробуйте встановити підказку лише на рядок символів, як-от "це моя підказка:" і перевірте, чи проблема не зникає. Якщо так, налаштування стовпця на терміналі є занадто широким або занадто вузьким.
Алекс Саммерс

7

Знайшли це рішення в Інтернеті, яке запропонувало закрити дужки кольоровим змінним:

Змініть це:

Black='\e[0;30m'        # Black
Red='\e[0;31m'          # Red
Green='\e[0;32m'        # Green

до:

Black='\e[0;30m\]'        # Black
Red='\e[0;31m\]'          # Red
Green='\e[0;32m\]'        # Green

Я вчинив зміни - сподіваюся, що це працює як очікувалося


1
не впевнений, чого цього слід досягти. Вам потрібно загорнути все, що не займає місця (ансі-втечі) \[ \], тому ви не можете просто закінчити всі кольори ансі-втечі, \]бо що робити, якщо цього немає \[. Коли ви вкладаєте символи, що не друкуються, вам слід просто загортати їх \[ \](наприклад PS1='\[\e[32;1m\] green prompt \[\e[0m\] $').
dylnmc

Справді! Без відкриття \ [, це захищає підказку для нас, користувачів Linux. Може бути, це інше для OSX? Як дивно. \ [і \ e [інтерпретуються як дві різні речі для Linux. Перший вказує на те, що наступна послідовність є недрукованою, і не вважати її частиною відображених символів підказки. \ E [є дуговою стрічкою для запуску кольорової схеми ANSI.
Алекс Саммерс

0

Моє переважне рішення проблеми перекриття довгих рядків у bash PS1 - це мати в \nкінці рядків рядків PS1 .

напр

введіть тут опис зображення

Якщо ви хочете, щоб усі інші мої речі - час, користувач, хост, каталог та гілка git (!), Ви можете скористатися цим (mac чи linux):

/unix//a/124012/10043


для гілки git ви повинні використовувати if [[ $(git rev-parse --is-inside-git-dir 2> /dev/null) ]]; then branch="$( git symbolic-ref --short -q HEAD 2> /dev/null )"; fi. Це стандарт, коли вкладають git у сценарій та оцінюють ім'я гілки з того, що я читав раніше.
dylnmc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.