2017-03-25 1 views
3

Ich möchte ein grünes Smile-Gesicht anzeigen, wenn der vorherige Exit-Code 0 ist und das rote Smile-Gesicht, wenn nicht erfolgreich.Wie Bash Prompt Farbe basierend auf Exit-Code des letzten Befehls ändern?

Grundsätzlich möchte ich diese Eingabeaufforderung aber mit anderen Sachen enthalten.

PS1='\[email protected]\h:\w `if [ $? = 0 ]; then echo \[\e[32m\]:\)\[\e[37m\]; else echo \[\e[31m\]:\(\[\e[37m\]; fi` $ ' 

ich abstrahieren wollen die Bedingung Logik auf eine Funktion, aber wenn ich versuche, diese beiden zu kombinieren, die Escape-Zeichen zeigen anstelle der Farben.

smiley()                  
{ 
    if [ $? == 0 ]; then 
     echo ':)' 
    else 
     echo ':(' 
    fi 
} 
RED="\033[1;5;91m" 
GREEN="\033[1;5;92m" 
NONE="\033[m" 
NORMAL="\[\033[0m\]" 
YELLOW="\[\033[1;4;93m\]" 
MAGENTA="\[\033[35m\]" 
WHITE="\[\033[1;37m\]" 
BLINK="\[\033[5m\]" 
#INVERT="\[\e[7m\]" 
#OFF="\[\033[m\]" 

PS1="${YELLOW}\u${MAGENTA}@${YELLOW}\h${NORMAL}:${WHITE}\w $(smiley)\n" 

Ich habe sogar eine Zeile versucht, aber es hat auch nicht funktioniert.

PS1='\[\033[1;4;93m\]\u\[\033[35m\]@\[\033[1;4;93m\]\h\[\033[0m\]\[\033[1;37m\] \W if [ $? = 0 ]; then echo \[\e[32m\]:\)\[\e[37m\]; else echo \[\e[31m\]:\(\[\ e[37m\]; fi\n' 

Gibt es eine Möglichkeit, dies ohne PROMPT_COMMAND zu tun?

+0

smiley eine großartige Idee als Statusanzeige! Ich habe '{0}' oder '{1}' verwendet, aber ich ändere das jetzt. – karakfa

Antwort

2

Ich nehme an, Ihr Angebot ist nicht korrekt. Ich fummelte ein wenig mit dieser um und bekam schließlich daran zu arbeiten:

$ bash --version 
GNU bash, version 4.4.12(3)-release (i686-pc-cygwin) 

$ smiley() 
> { 
> if [ "$?" == "0" ]; then 
>  echo -e '\e[0;32m:) ' 
> else 
>  echo -e '\e[0;31m:(' 
> fi 
> } 

$ PS1="$PS1"'`smiley`' 

$ :) rm non-existing 
rm: cannot remove 'non-existing': No such file or directory 

$ :(echo "Everything fine" 
Everything fine 

$ :) 

Ich tat dies unter Windows (64 Bit), aber ich denke, es sollte unter Linux (oder einem anderen Unix-artig) als auch.

Hinweise:

  1. schrieb ich eine Funktion smiley() (eine vereinfachte Version Ihrer) und überprüft es, indem sie es von der Kommandozeile aufrufen. Es hat gut funktioniert.

  2. Ich habe es zu PS1 hinzugefügt und es echote :) in jedem Fall. Ich erkannte, dass der Bash-Ersatz bereits im Auftrag von PS1 durchgeführt wurde.

  3. So habe ich den Aufruf von smiley durch ein zusätzliches Paar von einfachen Anführungszeichen gespeichert, um den Aufruf bis zur Ausgabe von Prompt zu verzögern. Jetzt funktioniert es wie erwartet.

  4. Da der Fragesteller eine farbige Version benötigte, habe ich ein Update gemacht. Ich habe die tatsächliche Lösung in diesem Link gefunden: SO: How to change the output color of echo in Linux. Es ist einfach, die notwendigen Terminal Escape-Sequenzen zu finden. Der Trick besteht darin, echo -e zu verwenden, um den umgekehrten Schrägstrich in echo zu ermöglichen.

Der Schnappschuss zeigt, wie es (mit Farben) sieht:

Snapshot of <code>bash</code> with tuned prompt in an <code>xterm</code>

+0

Hast du es mit Farben arbeiten lassen? Grün für den Smiley und rot für das Stirnrunzeln? – Char

+0

@Charles Jetzt mit Farben ... – Scheff

+0

Das ist genial! Warum verwenden Sie das Backtick-Symbol für den Funktionsaufruf? Ist 'smiley' anders als $ (smiley)? – Char

Verwandte Themen