2009-07-15 7 views
35

Я сделал что-то, чтобы разорвать свою оболочку Bash Shell в OS X (10.5.7).Ошибка оболочки обтекания оболочки

Это PS1, что я настроен:

PS1='\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\$ ' 

Насколько я могу сказать, у меня есть цвет команда правильно побег. Однако, когда я прокручиваю вверх и вниз в своей истории команд, я часто получаю проблемы с переносом строки, если исторические команды переносятся на несколько строк.

Я упростили мои подсказки к следующему:

PS1='\[\e[1m\]\h:\w\$ \[\e[0m\]' 
PS2='> ' 

И я все еще вижу что-то вроде:

localhost:~/Library/Application Support/Firefox/Profiles/knpmxpup.Defau 
lt/extensions/{1A2D0EC4-75F5-4c91-89C4-3656F6E44B68}$ expocd \{1A2D0EC4-7 
5F5-4c91-89C4-3656F6E           export PS1="\[ 
\e[1;32m\]\h\[\e[0m\]:           cd Library/Appl 
ication\ Support/

Я также попытался \033 вместо \e. Я просто включил PS2 там для информации, я не изменил его с установки по умолчанию. Если я полностью удалю цветовые коды, тогда все будет хорошо, любые идеи?

+0

Что такое 'TERM'? Если я правильно помню, эмуляция терминала Terminal.app точно не совпадает с чем-либо в базе данных terminfo, но 'dtterm' близок. – ephemient

+0

Я пробовал свой PS1 на bash 3.2.33 на Fedora8. Он работает нормально с длинными линиями даже при динамическом изменении ширины терминала. Он печатает повторяющиеся строки при изменении высоты, но это исправление Ctrl-L. Может быть ошибкой ... – neuro

+0

@ephemient my $ TERM is 'xterm-color' – Rob

ответ

2

Проблемы с переносом строк в Bash не являются чем-то новым. Обратитесь к списку рассылки, возможно, в этом есть еще одна ошибка.

Вы не можете сделать больше, чем пометить непечатаемые символы, остальное должно быть выполнено с помощью кода подсказки.

+0

Спасибо, я просто хотел подтвердить, что я избежал вещей правильно. – Rob

1

Кажется, что вы правильно сбежали и вложили последовательности.

Обходной путь, который я использую в любом случае, это добавить '\ n' в конце. Я нахожу это более ясным и уменьшаю любую проблему с проблемами упаковки. Точный конец моего PS1 является:

'\n\[\033[0;30m\]$\[\033[0m\] 

Отличной МЕТОДИЧЕСКИМ вы, наверное, знаете:

Bash prompt howto

20

This stackoverflow thread кажется уместным. Как заметил кто-то в этом потоке, Bash FAQ at mywiki.wooledge.org обсуждает, как правильно указывать цветовые коды в приглашениях Bash (FAQ 53) и правильном вызове цветов терминала (FAQ 37).

+0

Использование tput для генерации моих цветовых кодов, как описано в этом FAQ: http: //mywiki.wooledge.org/BashFAQ/037 И мои быстрые свитки намного лучше. Однако я также на новой версии OS X, поэтому я не уверен, что, возможно, исправил это. – Rob

45

Я сейчас, используя этот PS1 с хорошим эффектом:

green=$(tput setaf 2) 
blue=$(tput setaf 4) 
bold=$(tput bold) 
reset=$(tput sgr0) 
PS1="\[$green$bold\]\h\[$reset\]:\[$blue$bold\]\w\[$reset\]\$ " 

Прокрутка моей истории команд появляется для обработки строки оборачивает в настоящее время. Однако в то же время, так как этот вопрос был задан, я также обновил свой OS X 10.6.3

+1

Спасибо! Это давно сошло с ума. Я думаю, что трюк - это ваш метод для цвета. Я использовал этот стиль для цветов (этот синий синь): \ e [0; 34m –

+1

Работал и для меня! Спасибо –

+1

Спасибо! Это сводило меня с ума. – Joshua

0

На будущее, это то, что я использую:

export PS1="\[\033[0;31m\][\[email protected]:\w]$\[\033[0m\] "

Это будет отображать мое приглашение командного интерпретатора в качестве :

[[email protected]:~]$

Помогает мне различать живые и Девы сайты.

+2

Что это связано с вопросом OP? –

1

Вот мой: это лучший, который я нашел, но на том месте, где я изначально находил его, отсутствовал escape-символ, что привело к проблеме переноса строки. Я возился с ним и, наконец, начал работать. Он показывает вашу информацию о пользователе, пути и филиале с хорошим контрастом, по цвету.

export PS1='\[\e[1;37m\]\[\e[1;32m\]\u\[\e[0;39m\]:\[\e[1;33m\]\w\[\e[0;39m\]\[\e[1;35m\]$(__git_ps1 " (%s)")\[\e[0;39m\] \[\e[1;37m\]|\[\e[0;39m\]\$' 

Кроме того, добавьте

GIT_PS1_SHOWDIRTYSTATE=true 

Чтобы показать маркер, когда ветвь «грязные» (изменения должны быть совершены существуют)

export HISTCONTROL=ignoredups 

также полезно игнорировать дубликаты при прокрутке через историю бит.

bind "set completion-ignore-case on" 

Помогает также.

Наконец,

shopt -s checkwinsize 

Может быть полезно на OSX, если проблема сохраняется.

0

«shopt -s checkwinsize» также работает для Cygwin завернуть проблемы также

0

Если вы используете строку заголовка трюк "\e]2;titlebar\a", убедитесь, чтобы избежать, что тоже: "\[\e]2;titlebar\a\]"

1

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

Если мы выведем файл, который не имеет концевого символа в конце. Это смущает подсказку.

Вы можете воспроизвести это, выполнив:

curl https://gist.githubusercontent.com/martinos/d4aa0a7d4d752b0d0d9f/raw/3198c39f84a080c44227a084a19fb3a0bb661ee5/wrapping_issue.txt

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

Вы можете увидеть пример этого в действии:

https://asciinema.org/a/9mtjhi9dib6md4ocsbw210cca

Когда это происходит, просто нажмите <CTRL-C> и приглашение вернется в нормальное русло.

Обратите внимание, что в ZShell нет этой проблемы.

 Смежные вопросы

  • Нет связанных вопросов^_^