Anpassen der Bash-Shell: Fetten / färben Sie den Befehl

13

Es gibt eine Reihe von Tutorials / Beiträgen online (zB http://www.cyberciti.biz/faq/bash-shell-change-the-color-of-my-shell-prompt-under-linux-or-unix/ ) Informationen zum Anpassen der Eingabeaufforderung in Bash durch Festlegen PS1. Gibt es eine Möglichkeit, die Farbe / Fettdruck des von mir eingegebenen Befehls anzupassen?

Mit anderen Worten, lassen Sie uns als Beispiel sagen, dass ich eine grüne Eingabeaufforderung, einen fettblauen Befehl und dann eine Ausgabe in den Standardfarben wünschte. Im folgenden Beispiel " joe>" kann ich bereits festlegen, ob die Einstellungen " " grün, blau oder fett sind PS1. Aber gibt es eine Möglichkeit, wie ich git statuszum Beispiel eine mutige Show machen kann ?

joe> git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
...
jlarson
quelle
Wenn Sie eine wirklich gute Shell wollen, sollten Sie zsh verwenden, was Sie dort erreichen wollen, wäre sehr einfach mitpreexec() { printf '\e[0m' }
bollovan
3
@bollovan - "Wirklich gut" ist ein bisschen subjektiv, ich finde es wirklich verabscheuungswürdig, weil es aufgebläht ist und POSIX nicht erfüllt. Aber was auch immer Ihr Boot schwimmt.
Chris Down
@ ChrisDown Bloat schwimmt Ihr Boot - noch nie gehört, ziemlich amüsant.
n611x007

Antworten:

12

Sie müssten eine Farbe hinter der PS1 hinterlassen (starten Sie sie >in Ihrem Beispiel nach) und dann die Bash- DEBUGFalle verwenden, um die Farbe zu löschen, bevor Ihr Befehl ausgeführt wurde (aber nachdem Sie die Eingabetaste in Ihrer Shell gedrückt haben. Versuchen Sie etwas in der Art :

shopt -s extdebug
trap "tput sgr0" DEBUG
Chris Down
quelle
für jemanden, der fremd ist, um Codes zu entkommen: würde dies die ursprüngliche Farbe des Befehls beibehalten (z. B. würde ls --color=alwaysgefärbt werden)?
n611x007
@naxa - Ja, da hiermit explizit Farbcodes festgelegt werden (mit Ausnahme von Farben, die in der Standard-Terminalfarbe gefärbt sind und erst nach der ersten Farbe wirksam werden).
Chris Down
Dieser Trick scheint die Tab-Vervollständigung zu stören (druckt seltsame Dinge wie ^[(B^[[m). Es kommt jedoch nur auf einigen Systemen vor: Ich habe dies auf zwei Systemen getestet, auf denen Ubuntu 12.04 LTS ausgeführt wird und von denen nur eines die Störung hatte.
Musiphil
4

Der Vollständigkeit halber wird hier beschrieben, wie Sie eine Eingabeaufforderungsfarbe und die Befehlszeilen-Eingabefarbe in Bash festlegen. Setzen Sie diese Zeilen in Ihre .bashrc.

PS1='\[\e[1;34m\]\w\$ \[\e[0;32m\]'
trap 'printf \\e[0m' DEBUG

Die von Chris Down vorgeschlagene DEBUG-Trap wird zum Zurücksetzen der Textattribute verwendet. Es ist für das Debuggen gedacht, aber es ist auch nützlich, Code auszuführen, bevor der vom Benutzer eingegebene Befehl ausgeführt wird .

In der Aufforderungseinstellung:

  • \[…\] wird um Escape-Sequenzen herum verwendet, um bash mitzuteilen, dass sie keine Bildschirmanzeige verbrauchen (ohne sie würde der Bildschirm verstümmelt, wenn bash die Eingabeaufforderung neu zeichnen muss).
  • \e[…m wo handelt es sich bei einer Zahl oder allgemeiner bei einer durch Semikolons getrennten Folge von Zahlen um Escape-Folgen, die an das Terminal gesendet werden, um die Farbe und andere Attribute des folgenden Texts zu beeinflussen. Setzt zum Beispiel 1;34fett blau; 0;32Setzt alle Attribute zurück und wechselt dann die Farbe zu Grün. Nach Geschmack anpassen.
  • \w\$Drucken Sie das aktuelle Verzeichnis und $oder #. Sie können dies natürlich nach Belieben ändern und Textattributänderungen dazwischen einfügen, wenn Sie möchten.
  • Am Ende befindet sich eine letzte Attributänderung, die die Farbe der Texteingabe festlegt.
Gilles 'SO - hör auf böse zu sein'
quelle
Zu Ihrer
Information
0

Ich lerne gerade über BASH-Befehle und habe hier mit den Farbbefehlen in meiner Version gespielt. Ich fand diese Lösung heraus:

Mit diesem Befehl:

PS1='\[\e[0:36m\]\h>\[\e[0;31m\]'

Dekonstruieren: PS1 =: Startet den PS1-Befehl

'': enthält den Befehl in einfachen Anführungszeichen (BASH glaubt nicht, dass es ein Befehl dafür ist)

\: jeder einzelne Befehl beginnt damit

[]: enthält jeden Befehl

\ e (kann auch ein ASCII-Escapezeichen sein): Startet einen Farbbefehl

Der Farbbefehl steht vor dem Objekt, auf das er angewendet wird.

[\ e [0; 36 m]: Cyan

\ h: Hostname

'>': Wird nach dem Hostnamen gedruckt

[\ e [0; 31 m]: rot

Anscheinend macht der rote Befehl am Ende die Eingabe rot. Ändern Sie einfach die Farben nach Ihren Wünschen und das ist, was Sie suchen.

Auch diese Seite hat mir ein wenig geholfen:

https://www.linuxnix.com/linuxunix-shell-ps1-prompt-explained-in-detail/

Meine Version: GNU bash, v. 4.2.46

Pass auf,

Wiesel

Wiesel
quelle