Еще Одна Крутая История О Bash Prompt

Я программист. По крайней мере, так написано в трудовой книжке.

Почти всё своё рабочее время я провожу в консоли и текстовом редакторе.

Мне очень нравится Баш.

Я прожил в zsh почти год, прислушиваясь к советам своих многочисленных коллег и знакомых, но в итоге вернулся в bash и ни капельки об этом не жалею.



Еще одна крутая история о bash Prompt

Зш красивый, приятный, чертовски функциональный, но, признаюсь честно, со всеми его многочисленными настройками я не справился.

Я хочу работать, а не бороться со своей рабочей средой.

Простой пример: пару раз из-за автодополнения zsh я удалял все каталоги и файлы в текущем каталоге - zsh просто ставил пробел между каталогом автозаполнения и введенной звездочкой (хотел удалить все в выбранной папке) .

Помните этот эпическая ошибка с пробелом и удалением каталога /usr? У меня было то же самое.

Благодаря Гите я снова помог.

Впрочем, дело не в zsh - если бы я был немного умнее, я бы точно справился с этим, и все было бы хорошо, но мы, суровые программисты, будем использовать bash и vim, а гламурные zsh и textmate оставим хипстерам и другие модники ;) Ничего оригинального писать и универсального решения не дам, но мне всегда нравилось читать чужие конфиги и описания, а если к ним прилагались интересные картинки, то я вообще перечитывал эти статьи несколько раз.

Надеюсь, вам это тоже будет интересно.

Если вдруг что-то, что я написал, можно решить проще, или в bash уже есть описанный функционал, пишите в комментариях.

Ну и на всякий случай мой адрес проживания:

  
  
   

GNU bash, version 4.2.28(2)-release (i386-apple-darwin11.3.0)



Добавьте разрыв строки перед приглашением

Итак, первое, что мне каждый день не нравится в bash, — это команды, которые не заканчивают вывод переносом строки при выходе.

Вот простой пример (имитирующий это поведение):

Еще одна крутая история о bash Prompt

Ничего страшного, конечно, не произошло, но zsh правильно справляется с этой ситуацией, так что давайте научим bash этому трюку.

Для этого нам нужно смотреть на положение курсора каждый раз, когда мы отображаем приглашение командной строки (PS1), и, если курсор не находится на первом символе строки, отображать перевод строки («\n» характер).

Положение курсора можно определить с помощью escape-последовательности:

echo -en "\033[6n" && read -sdR CURPOS

В результате переменная CURPOS будет содержать что-то вроде этого: «^[[4;12R», где 4 — номер строки, а 12 — номер символа в строке.

Добавьте соответствующий код в нашу конфигурацию bash (~/.

bashrc или ~/.

bash_profile):

# setup color variables color_is_on= color_red= color_green= color_yellow= color_blue= color_white= color_gray= color_bg_red= color_off= if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then

Теги: #linux #shell #bash #prompt #ps1 #крутая история, братан

Вместе с данным постом часто просматривают: