Wie kann das Terminal Benutzer @ Maschine in Fettdruck anzeigen?


31

Ich habe in einigen Screenshots gesehen (kann mich nicht erinnern, wo im Web), dass das Terminal die [username@machine /]$fett gedruckten Buchstaben anzeigen kann . Ich freue mich darauf, das auch zu bekommen, weil ich immer durch lange Ausgaben scrolle, um die erste Zeile nach meinem Befehl mühsam herauszufinden.

Wie kann ich den Benutzernamen usw. fett oder farbig machen?


Können Sie klären, ob Sie die Bash-Shell oder eine andere Shell verwenden?
Stephen Quan

Gnome Terminal Bash.
Benjamin

Antworten:


22

Sie sollten in der Lage sein, dies zu tun, indem Sie die PS1Eingabeaufforderungsvariable in Ihrer ~/.bashrcDatei wie folgt festlegen :

PS1='[\u@\h \w]\$ '

Um es farbig (und möglicherweise fett - dies hängt davon ab, ob Ihr Terminal-Emulator es aktiviert hat) zu machen, müssen Sie Escape-Farbcodes hinzufügen:

PS1='\[\e[1;91m\][\u@\h \w]\$\[\e[0m\] '

Hier wird alles, was nicht zwischen den 1;91mund 0m-Teilen ausgeblendet wird, in der 1;91Farbe (fett rot) eingefärbt . Setzen Sie diese Escape-Codes an verschiedenen Stellen der Eingabeaufforderung ein, um unterschiedliche Farben zu verwenden. Vergessen Sie jedoch nicht, die Farben mit zurückzusetzen 0m, da Sie sonst auch eine farbige Terminalausgabe erhalten. Denken Sie daran, die Datei anschließend als Quelle zu verwenden, um die aktuelle Shell zu aktualisieren:source ~/.bashrc


Warum nicht 31 für Rot verwenden? 91 scheint kein Standardcode zu sein.
jw013

1
@ jw013 Der Bereich 90-97 entspricht dem Bereich 30-37, wenn er in Fettdruck verwendet wird, dh 1;31und 1;91. Bei normaler Schriftgröße liefert der Bereich 90-97 hellere Farben als der andere.

45

Finden Sie, wo Ihr PS1in Ihrem festgelegt ist, .bashrcund fügen Sie '\[\e[1m\]'am Anfang und \[\e[0m\]am Ende ein.

  • \[und \]sind notwendig, damit die Shell weiß, dass das Chaos im Inneren 0 Platz auf dem Bildschirm einnimmt, was ein vermasseltes Verhalten bei der Zeilenbearbeitung verhindert. Sie brauchen sich nicht zu viele Sorgen zu machen.
  • \e[ist als CSI (Control Sequence Introducer) bekannt. Sie werden sehen, dass es in den meisten Codes verwendet wird, die auf der Wikipedia-Seite aufgeführt sind, auf die verwiesen wird. \e bedeutet das Fluchtzeichen.
  • Wenn Sie in der SGR-Tabelle auf der Wikipedia-Seite nachsehen, sehen Sie, dass die 1 die Zahl für hellen / fetten Text ist und 0 für Zurücksetzen. Dadurch CSI 1mwird es fett CSI 0mangezeigt und die Schriftart wird zurückgesetzt, sodass der Rest Ihres Texts normal ist.

Wikipedia hat eine volle Liste der ANSI-Escape-Codes , die Sie verwenden können, wenn Ihr Terminal-Emulator dies unterstützt.

Bearbeiten

Für die Portabilität und Lesbarkeit sollten Sie verwenden tput Escape-Codes anstelle der festen Codierung verwenden. Der einzige Nachteil ist, dass der tputAnsatz bei Terminals, die ANSI-Codes unterstützen, jedoch fehlerhafte oder fehlende Terminfo-Datenbanken aufweisen, nicht funktioniert. In diesem Fall ist der Fehler jedoch ein größeres Problem, da viele Ihrer Konsolen-Apps, die auf terminfo basieren, möglicherweise nicht ordnungsgemäß funktionieren.

Hier ist ein Beispiel, was ich in meinem mache .bashrc:

# color names for readibility
reset=$(tput sgr0)
bold=$(tput bold)
black=$(tput setaf 0)
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
blue=$(tput setaf 4)
magenta=$(tput setaf 5)
cyan=$(tput setaf 6)
white=$(tput setaf 7)
user_color=$green
[ "$UID" -eq 0 ] && { user_color=$red; }
PS1="\[$reset\][\[$cyan\]\A\[$reset\]]\[$user_color\]\u@\h(\l)\
\[$white\]:\[$blue\]\W\[$reset\][\[$yellow\]\$?\[$reset\]]\[$white\]\
\\$\[$reset\] "

Hier ist, wie eine generisierte Version von mir aussehen würde. Dies 0ist der Beendigungsstatus des letzten Befehls.

PS1-Screenshot


Nette und erklärende Antwort, +1. Trotzdem fand ich Hesses Antwort mehr auf den Punkt, also entschied ich mich für sie.
Benjamin

Als ich das versuchte, stieß ich auf ein Problem wie eine Terminal-Eingabeaufforderung, die nicht richtig umbrochen wurde . Machst du? Haben Sie die Escape-Sequenzen aktualisiert?
Stefan Lasiewski

6

Dies ist die Standardeingabeaufforderung, die Sie in der Cygwin-Bash-Shell erhalten:

PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '

Bildbeschreibung hier eingeben

\[\e]0;\w\a\] = Set the Window title to your current working directory
\n            = new line
\[\e[32m\]    = Set text color to green
\u@\h         = display username@hostname
\[\e[33m\]    = Set text color to yellow
\w            = display working directory
\[\e[0m\]     = Reset text color to default
\n            = new line
\$            = display $ prompt

Verweise:


Schön, ich habe vor dem [user @ host] eine neue Zeile eingefügt , die jeden Befehl noch lesbarer macht (dies sollte standardmäßig auf dem Terminal imo eingestellt sein).
Benjamin

2

Ich benutze diese Shell-Funktion, um Textattribute in das Terminal zu bekommen:

color () {
  if [ -z "$1" -a -z "$2" -a -z "$3" ]; then
    echo "\033[0m"
    return
  fi
  case $1 in
    black)   color_fg=30;;
    red)     color_fg=31;;
    green)   color_fg=32;;
    yellow)  color_fg=33;;
    blue)    color_fg=34;;
    magenta|purple) color_fg=35;;
    cyan)    color_fg=36;;
    white)   color_fg=37;;
    -)       color_fg='';;
    *)       color_fg=39;;
  esac
  case $2 in
    bold)      color_bd=1;;
    italics)   color_bd=3;;
    underline) color_bd=4;;
    inverse)   color_bd=7;;
    strike)    color_bd=9;;
    nobold)      color_bd=22;;
    noitalics)   color_bd=23;;
    nounderline) color_bd=24;;
    noinverse)   color_bd=27;;
    nostrike)    color_bd=29;;
    -)         color_bd='';;
    *)         color_bd=0
  esac
  case $3 in
    black)   color_bg=40;;
    red)     color_bg=41;;
    green)   color_bg=42;;
    yellow)  color_bg=43;;
    blue)    color_bg=44;;
    magenta|purple) color_bg=45;;
    cyan)    color_bg=46;;
    white)   color_bg=47;;
    -)       color_bg='';;
    *)       color_bg=49;;
  esac
  s='\033['
  if [ -n "$color_bd" ]; then
    s="${s}${color_bd}"
    if [ -n "$color_fg" -o -n "$color_bg" ]; then
      s="${s};"
    fi
  fi
  if [ -n "$color_fg" ]; then
    s="${s}${color_fg}"
    if [ -n "$color_bg" ]; then
      s="${s};"
    fi
  fi
  if [ -n "$color_bg" ]; then
    s="${s}${color_bg}"
  fi
  s="${s}m"
  echo "$s"
  unset s color_bd color_bg color_fg
}

Dann benutze es:

color_reset=`color`
color_grbd=`color green bold`
color_bubd=`color blue bold`
PS1="\[${color_grbd}\][\u@\h]\[${color_reset}\]:\[$color_budb}\]\w\[${color_reset}\]> "

Dies gibt mir, [username@hostname]:cwd>wo username@hostnamefett grün und cwdfett blau sind.


Danke dafür. Ich denke, ich musste auch alle oben genannten in kopieren ~/.bashrc?
Benjamin

Ja, ich habe das in meiner ~/.bashrcDatei festgelegt und verwende es, um meine Eingabeaufforderung festzulegen. Ich ändere sogar die Farben, je nachdem, auf welchem ​​System ich bin.
Arcege

1

Fügen Sie hinzu, damit es wie eine Standard-Ubuntu-Eingabeaufforderung aussieht

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

in deinem ~/.bashrc.

Dies erzeugt das bekannte Grün user@host(fett), gefolgt von einem nicht fettgedruckten weißen Doppelpunkt, gefolgt von Ihrem Arbeitsverzeichnis in fettgedrucktem Blau, gefolgt von einem $Zeichen, einem Leerzeichen und Ihrem Befehl in nicht fettgedruckten weißen Buchstaben:

Ubuntu Bash-Eingabeaufforderung

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.