2009-07-15 25 views
35

Ich habe etwas getan, um meine Bash Shell Eingabeaufforderung in OS X (10.5.7) Terminal zu brechen.Shell Prompt Zeilenumbruch Problem

Dies ist das PS1, dass ich so konfiguriert hatte: Als

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

soweit ich das beurteilen kann ich die Farbbefehle zu entkommen richtig haben. Wenn ich jedoch in meinem Befehlsverlauf nach oben und unten scrolle, erhalte ich häufig Zeilenumbruchprobleme, wenn die historischen Befehle auf mehrere Zeilen umbrechen. Ich habe auch versucht \033 statt \e

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/

:

ich vereinfacht meine Anweisungen auf die folgenden:

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

Und ich immer noch so etwas wie sehen. Ich habe gerade PS2 zur Information hinzugefügt, ich habe das von der Standardinstallation nicht geändert. Wenn ich die Farbcodes komplett entferne funktioniert alles gut, irgendwelche Ideen?

+0

Was ist '$ TERM'? Wenn ich mich recht erinnere, stimmt die Terminal-Emulation von terminal.app nicht mit irgendwas in der terminfo-Datenbank überein, aber 'dtterm' ist nah. – ephemient

+0

Ich habe Ihre PS1 auf Bash 3.2.33 auf Fedora8 versucht. Es funktioniert OK mit langen Zeilen, auch wenn die Breite des Terminals dynamisch geändert wird. Es druckt doppelte Zeilen, wenn Sie die Höhe ändern, aber eine Ctrl-L korrigiert das. Könnte ein Bug sein ... – neuro

+0

@ephemient mein $ TERM ist 'xterm-color' – Rob

Antwort

2

Zeilenumbruch Probleme in Bash sind nichts Neues. Konsultieren Sie die Mailingliste, vielleicht gibt es noch einen weiteren Fehler.

Sie können nicht mehr als nur nicht druckbare Zeichen markieren, der Rest muss durch den Eingabeaufforderungscode erfolgen.

+0

Danke, ich wollte nur bestätigen, dass ich die Dinge richtig entkam. – Rob

1

Es scheint, dass Sie Sequenzen korrekt entkommen und eingeschlossen haben.

Eine Problemumgehung benutze ich es trotzdem, um ein '\ n' am Ende hinzuzufügen. Ich finde es klarer und lindere jedes Problem mit Wrapping-Problemen. Das genaue Ende meiner PS1 ist:

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

Eine ausgezeichnete Howto Sie wahrscheinlich wissen:

Bash prompt howto

20

This stackoverflow thread relevant erscheint. Wie in diesem Thread erwähnt, erläutert die Bash FAQ at mywiki.wooledge.org, wie Sie Farbcodes in Bash-Aufforderungen (FAQ 53) und den richtigen Aufruf von Terminalfarben (FAQ 37) richtig zitieren.

+0

Mit tput, um meine Farbcodes wie in dieser FAQ beschrieben zu generieren: http: //mywiki.wooledge.org/BashFAQ/037 Und meine Eingabeaufforderung scrollt viel besser. Allerdings bin ich auch auf einer neuen Version von OS X, daher bin ich mir nicht sicher, was das behoben haben könnte. – Rob

45

Ich verwende jetzt diese PS1 mit guter Wirkung:

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

Blättern in meinem Befehl Geschichte erscheint Linie zu handhaben wickelt jetzt. Doch in der Zwischenzeit, da diese Frage gestellt wurde ich auch

+1

Danke! Das hat mich für eine lange Zeit verrückt gemacht. Ich denke, der Trick ist deine Methode, Farben zu machen. Ich benutzte diesen Stil für Farben (dieser ist blau fett): \ e [0; 34m –

+1

Arbeitete auch für mich! Danke –

+1

Danke! Das hat mich verrückt gemacht. – Joshua

0

Für die Zukunft auf 10.6.3 mein OS X aktualisiert, ist es das, was ich benutze:

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

Das wäre meine Shell-Prompt angezeigt werden als :

[[email protected]:~]$

Hilft mir zwischen lebenden und dev Websites zu unterscheiden.

+2

Was hat das mit der Frage des OP zu tun? –

1

Hier ist meins: es ist das beste, was ich gefunden habe, aber die Seite, wo ich es ursprünglich gefunden hatte, fehlte ein Escape-Zeichen, was zu dem Zeilenumbruchproblem führte. Ich habe daran herumgebastelt und es endlich funktioniert. Es zeigt Ihre Benutzer-, Pfad- und Zweiginformationen mit einem guten Kontrast farblich an.

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\]\$' 

Fügen Sie außerdem

GIT_PS1_SHOWDIRTYSTATE=true 

einen Marker zu zeigen, wenn ein Zweig "dirty" ist (Änderungen existieren begangen werden)

export HISTCONTROL=ignoredups 

ist auch nützlich, um Duplikate zu ignorieren beim Scrollen durch die bash geschichte.

bind "set completion-ignore-case on" 

Hilft auch.

Schließlich

shopt -s checkwinsize 

Auch OSX hilfreich sein, wenn Probleme bestehen bleiben.

0

‚shopt es checkwinsize‘ funktioniert auch für Cygwin auch

0

Probleme wickelt Wenn Sie auf die Titelleiste Trick "\e]2;titlebar\a" verwenden, stellen Sie sicher, auch zu entkommen, dass: "\[\e]2;titlebar\a\]"

1

Ich bemerkte, dass es einige gibt, Probleme mit der Cursorpositionierung, selbst wenn in der Umgebungsvariablen PS1 oder PROMPT kein Sonderzeichen vorhanden ist.

Wenn wir eine Datei ausgeben, die am Ende kein Zeilenende-Zeichen enthält. Es wird die Aufforderung verwirren.

Sie können dies reproduzieren, indem Sie:

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

und Drücken der oberen Steuertaste mehrmals, und Sie werden sehen, dass die Aufforderung verwirrt.

Sie können ein Beispiel dafür in Aktion sehen:

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

Wenn dies geschieht, nur <CTRL-C> drücken und die Eingabeaufforderung wird in den normalen zurückkommen.

Beachten Sie, dass Zshell dieses Problem nicht aufweist.