2009-04-01 12 views
10

przyznać, że używam nieco rozwlekły znak zachęty:Dlaczego ta zachęta bash działa dziwnie/znika i jak mogę to naprawić (OS X)?

--(username)-(Wed April 01|12:00:00)--(~ $

Ostatnio, mam świetny pomysł, aby go zmienić tak, że w zależności od wartości wyjściowej z poprzedniego polecenia, jeśli sukces, elementy wnętrz() byłyby zielone, aw razie niepowodzenia byłyby czerwone. Zrobiłem to działając w większości przypadków (niektóre dziwne stany wyjścia zmienią kolor na coś innego, ale jestem z tym w porządku), ale kiedy wpisuję polecenie, które jest więcej niż jedną linią, i powoduje przewijanie terminala, prompt zniknie! Moja podpowiedź działała dobrze, kiedy nie było koloru, więc domyślam się, że jest to związane z moim ucieczką kolorów, a szczególnie z nie zamkniętymi, ale nie mogę tego potwierdzić.

#.profile 
export PS1='--(\e[$((32-${?}))m\u\e[0m)-(\e[$((32-${?}))m\d\e[0m|\e[$((32-${?}))m\T\e[0m)--(\e[$((32-${?}))m\w\e[0m \$ '

Z góry dziękuję!

Odpowiedz

34

To brzmi jak this powinien rozwiązać twój problem.

To wydaje się działać dla mnie *:

export PS1='--(\[\e[$((32-${?}))m\]\u\[\e[0m\])-(\[\e[$((32-${?}))m\]\d\[\e[0m\]|\[\e[$((32-${?}))m\]\T\[\e[0m\])--(\[\e[$((32-${?}))m\]\w\[\e[0m\] \$ ' 

* dobrze, naprawdę export PS1='\[email protected]\h:\w\$ ' działa na mnie

Cytując połączoną post, odpowiedź leży w dodawaniu \ [i \] wokół wszystkie twoje sekwencje kolorów w deklaracji PS1:

Zanim miałem następującą wartość dla PS1:

'\ e [0; 34m \ h: \ w [] \ $ \ e [0m!

który dał mi piękny niebieski wiersz z poniższego formularza

hosta: Praca -directory [numer polecenia] $

Jednak miałem ten sam problem z zawijaniem linii. Poprawka polegała na wstawieniu \ [i \] wokół znaków ANSI, aby powłoka wiedziała, że ​​nie uwzględnia ich w obliczeniu zawijania linii. Prowadzi to do następujących wartości dla PS1:

'\ [\ e [0; 34m \] \ h! \ W [] \ $ \ [\ e [M \]'

+2

Chas, patrząc tylko na to pytanie, moje oczy są czerwone. Dziękuję za pomoc, proszę pana! Twoje było jedynym rozwiązaniem, które wydawało się działać całkowicie. –

+0

Po zmianie koloru monitu (w systemie Linux, nie w systemie OSX) miałem problemy z przeszukaniem wstecz w mojej historii. To rozwiązało mój problem. Dzięki! – Mark

6

http://mywiki.wooledge.org/BashFAQ/053 - Mam fantazyjną podpowiedź w kolorach, a teraz bash nie wydaje się wiedzieć, jak szeroki jest mój terminal. Linie zawijają się niepoprawnie.

Przy okazji; w celach informacyjnych; oto moja PS1 który wygląda następująco: alt text http://lhunath.lyndir.com/stuff/PS1.png

\[$reset$bold$green\]\[email protected]\h\[$blue\] \W \[$red\]${?/#0/\[$green\]}\$\[$reset\] 

Wskazówki jak umieścić wszystkie kody kolorów w $parameters aby go neater, ale co ważniejsze, ponieważ należy używać tput je generować. Zobacz:

http://mywiki.wooledge.org/BashFAQ/037 - Jak mogę wydrukować tekst w różnych kolorach?

Deklaruję moje parametry kolorów w skrypcie narzędziowym, który jest pobierany przez my ~/.bashrc (i dowolne skrypty, które piszę), który nazywa się bashlib.

Na notatce końcowej; wpisz swoją PS1 definicję w ~/.bashrc i nie go. Nie ma absolutnie żadnego powodu, dla którego powinieneś dodać swoją definicję PS1 do środowiska wszelkich procesów spawnowania ze swojej powłoki.

1

Po prostu wydaje się, że brakuje początkowe i końcowe nawiasy wokół ucieczek (przed pierwszym „\ e” i po ostatnim „m”):

PS1='--(\[\e[$((32-${?}))m\u\e[0m)-(\e[$((32-${?}))m\d\e[0m|\e[$((32-${?}))m\T\e[0m)--(\e[$((32-${?}))m\w\e[0m\] \$ ' 

Jak wspomniano, PS1 var nie trzeba wyeksportować: tylko twoja powłoka musi to zobaczyć.