Wie kann ich .bashrc anpassen, um die Eingabeaufforderung zu konfigurieren?

8

Gibt es eine einfache Möglichkeit, meine Bash-Eingabeaufforderung zu ändern, um die Farben und den angezeigten Text zu ändern? Ich habe gehört, dass dies in getan wird .bashrc, aber ich habe keine netten, einfachen Möglichkeiten gefunden, es zu ändern. Wie werden Farben in Bash ausgedrückt?

Naftuli Kay
quelle
Achten Sie darauf, zu stöbern bash+prompt, obwohl ich nicht glaube, dass wir dort ein Tutorial haben.
Gilles 'SO - hör auf böse zu sein'
2
Es gibt eine gute Anleitung zum Einrichten einer Color Bash-Eingabeaufforderung im Arch Linux-Wiki , einschließlich einer Liste von Farben und einiger guter Beispiele.
Jasonwryan

Antworten:

4

Ich hatte einmal die in meinem definiert .bashrc:

export e="\e["

function cls          { echo -n "${e}H${e}J${e}0m"; }
function rcls         { echo -n "${e}H${e}J${e}S${e}H${e}J${e}0m${e}u${e}J"; } # not quite yet !
# rcls only works when no funny codes have been issued in between, i.e. the buffer is clean
# below the current screen. And then there can be issues with the first line of the buffer.

function bright       { echo -n "${e}1m"; }
function normal       { echo -n "${e}0m"; }
function colour       { echo -n "${e}$1;$2;$3m"; }
function black        { echo -n "${e}30m"; }
function bg_black     { echo -n "${e}40m"; }
function red          { echo -n "${e}31m"; }
function bg_red       { echo -n "${e}41m"; }
function green        { echo -n "${e}32m"; }
function bg_green     { echo -n "${e}42m"; }
function yellow       { echo -n "${e}33m"; }
function bg_yellow    { echo -n "${e}43m"; }
function blue         { echo -n "${e}34m"; }
function bg_blue      { echo -n "${e}44m"; }
function magenta      { echo -n "${e}35m"; }
function bg_magenta   { echo -n "${e}45m"; }
function cyan         { echo -n "${e}36m"; }
function bg_cyan      { echo -n "${e}46m"; }
function white        { echo -n "${e}37m"; }
function bg_white     { echo -n "${e}47m"; }
function c_up         { echo -n "${e}$1A"; }
function c_down       { echo -n "${e}$1B"; }    # within
function c_right      { echo -n "${e}$1C"; }
function c_left       { echo -n "${e}$1D"; }    # screen
function c_pos        { echo -n "${e}$1;$2f"; } # [Hf]
function c_line       { echo -n "${e}$1d"; }
function screentop    { echo -n "${e}H"; }      # [Hdf]
function linetop      { echo -n "${e}G"; }
function buffertop    { echo -n "${e}u"; }      # depends on other control characters ?
function tab          { echo -n "${e}I"; }
function backtab      { echo -n "${e}Z"; }
function scrolldown   { echo -n "${e}$1T"; }    # within screen
function scrolldown_B { echo -n "${e}$1L"; }    # scroll down below cursor
function scrollup_B   { echo -n "${e}$1M"; }    # scroll up below cursor
function clear        { echo -n "${e}J"; }      # delete to end of screen
function cleanbuffer  { echo -n "${e}S"; }      # copies first screen to bottom and clears
                                                # everything else above the cursor.
#function xxx { echo -n "${e}xxx"; }

export -f bright normal colour
export -f black bg_black red bg_red green bg_green yellow bg_yellow
export -f blue bg_blue magenta bg_magenta cyan bg_cyan white bg_white
export -f c_up c_down c_right c_left c_pos c_line
export -f screentop linetop buffertop tab backtab
export -f scrolldown scrolldown_B scrollup_B clear cleanbuffer

Sie können sie dann beispielsweise verwenden mit:

PS1_init="\n$(bright)$(black)$(hostname):\w\n$(bg_blue)"
PS1_end="$(normal)$(bright)\n\! -> $(normal)$(clear)"
export PS1="$PS1_init"'$(date)'"$PS1_end"

Diese können Ihnen helfen.

Der Grund, warum ich sie eher zu Funktionen als zu Variablen gemacht habe, ist Faulheit. Ich wollte nur auf das Tippen verzichten. Wenn Sie nach Effizienzvariablen suchen, ist dies natürlich besser.

Letztendlich passen diese jedoch nur auf bestimmte Terminals. Wenn Sie Hilfe benötigen, konsultieren Sie die Dokumentation Ihres Terminals, nicht die von Bash oder einer anderen Shell.

asoundmove
quelle
Eine der besten bashrc-Definitionen, die ich bisher gesehen habe!
TheTuxRacer
1
Variablen würden beim Tippen sparen: bright=$'\e1m'und so weiter. (Es sei denn , Sie Kompatibilität mit sehr alten Versionen benötigen , die nicht über die $'…'Syntax.)
Gilles ‚SO- Anschlag Sein Übel‘
@ Gilles, du hast es falsch verstanden: Ich tippe lieber bluean der Eingabeaufforderung (oder in einem Shell-Skript) als echo $blue.
Asoundmove
2

Bash verwendet das Ansi-Farbschema - Wikipedia-Artikel: http://en.wikipedia.org/wiki/ANSI_escape_code#Colors

Hier ist zum Beispiel meine Eingabeaufforderung: (Ich mag meine Eingabeaufforderung in einer separaten Zeile, aber nicht jeder. Außerdem haben meine Begriffe einen dunklen Hintergrund - passen Sie die Farben an, wenn Ihre Begriffe hell sind.)

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[31m\]\h \[\e[0;36m\]\t \[\e[93m\]\w\[\e[36m\] p$$-\!-\$\[\e[0m\]\n\$ '

Die speziellen Eingabeaufforderungswerte sind in der Bash-Manpage unter "Eingabeaufforderung" beschrieben:

\u  the username of the current user
\h  the hostname up to the first `.'
\t  the current time in 24-hour HH:MM:SS format
\w  the current working  directory,  with 
    $HOME  abbreviated with  a tilde
    (uses the value of the PROMPT_DIRTRIM variable)
$$  PID of the Bash (helps distinguish my many terms.
    Useful, eg, if I have to kill something.
\!  the history number of this command
\n     newline
\$  if the effective UID is 0, a #, otherwise a $
LenW
quelle
1
Bash verwendet nicht das Ansi-Farbschema. Es ist das Terminal, das die Escape-Codes implementiert. Bash funktioniert auf jedem Terminal, daher ist es möglicherweise am besten tput setf _n_, den Escape-Code zum Festlegen der Vordergrundfarbe abzurufen.
Camh
0

Zum Färben können Sie dies beispielsweise tun:

Fügen Sie einfach die folgende Zeile hinzu:

export PS1=" \[\033[34m\]\u@\h \[\033[33m\]\w\[\033[31m\]\[\033[00m\] $ "

Vorschau: Geben Sie hier die Bildbeschreibung ein

Das sind meine bevorzugten Farben. Sie können jeden Teil der Farbe der Eingabeaufforderung anpassen, indem Sie mCodes (z. B. 34m) ändern, bei denen es sich um ANSI-Farbcodes handelt.

Liste der ANSI-Farbcodes:

  • Schwarz: 30 m
  • Rot: 31 m
  • Grün: 32 m
  • Gelb: 33 m
  • Blau: 34 m
  • Lila: 35 m
  • Cyan: 36 m
  • Weiß: 37 m
Shayan Amani
quelle
0

Keine dieser Antworten hat mir geholfen zu lernen, wie eine schnelle Anpassung funktioniert. Folgendes habe ich aus ein paar Stunden Suche in verschiedenen Foren, Stacks, Wikis usw. zusammengestellt:

Finden Sie Ihre Eingabeaufforderung

nano ~/.bashrc

Suchen Sie Ihr bashrcfür PS1entweder manuell oder mit Alt + F . Dies ist die erste Bash-Eingabeaufforderung, die angezeigt wird, wenn Sie einen Befehl eingeben. PS[2-4]gibt es auch, aber diese werden selten verwendet.

Farben definieren

Fügen Sie über Ihrer PS1Linie die folgenden Farbdefinitionen hinzu:

# Color Variables
c1='\[\033[0;30m\]' # Non-bold color 1
C1='\[\033[1;30m\]' # Bold color 1
c2='\[\033[0;31m\]' # Non-bold color 2
C2='\[\033[1;31m\]' # Bold color 2
c3='\[\033[0;32m\]' # Non-bold color 3
C3='\[\033[1;32m\]' # Bold color 3
c4='\[\033[0;33m\]' # Non-bold color 4
C4='\[\033[1;33m\]' # Bold color 4
c5='\[\033[0;34m\]' # Non-bold color 5
C5='\[\033[1;34m\]' # Bold color 5
c6='\[\033[0;35m\]' # Non-bold color 6
C6='\[\033[1;35m\]' # Bold color 6
c7='\[\033[0;36m\]' # Non-bold color 7
C7='\[\033[1;36m\]' # Bold color 7
c8='\[\033[0;37m\]' # Non-bold color 8
C8='\[\033[1;37m\]' # Bold color 8
NC='\[\033[0m\]'    # Back to default color

Farben konfigurieren

Irgendwo in Ihrem (vermutlich grafischen) Terminal sollten Sie eine Anpassungsoption haben. Zum Beispiel verwende ich die Konsole von KDE : Settings > Edit Current Profile... > Appearance > Edit...zeigt diese Anpassungsoberfläche:

Anpassung der Konsolenfarben

Ändern Sie diese nun in die gewünschten Farben. Ihr Vordergrund ist Ihre Standardfarbe, und Sie haben die Farben 1 bis 8 definiert, die Sie auswählen können. Nicht, dass die Definitionen auf 0 basieren, während diese Anpassung und Ihre Variablen auf 1 basieren.

Verwenden Sie die Farben in Ihrer Eingabeaufforderung

Für meine Standardaufforderung habe ich:

PS1="[\u@\h \W]\$ "

\uSie ist u sername, \hist Ihr h ostname, \Wist W hier sind Sie (das Verzeichnis), und \$ist die Aufforderung Dingen ( #wenn Benutzer - ID = 0 [root]).

Sie können dies anpassen, indem Sie $c1$ c2` usw. vor der Farbe hinzufügen , die Sie ändern möchten. Zum Beispiel habe ich:

PS1="$c2[$C8\u$c2@$C7\h $C6\W$c2]$C2\$$NC "

Das führt zu:

Meine Bash-Eingabeaufforderung

Hinweis: Sie müssen es NCam Ende verwenden, um es auf Ihre Standardfarbe zurückzusetzen, da sonst alles nach Ihrer Eingabeaufforderung (Ihrer Eingabe) die letzte Farbe in Ihrer Eingabeaufforderung hat.

Raymo111
quelle