it-swarm.com.de

Ändern der Farben für Benutzer-, Host- und Verzeichnisinformationen in der Eingabeaufforderung des Terminals

Ist es möglich, die Farben in der Eingabeaufforderung für den [email protected] sowie das aktuelle Verzeichnis und die Befehlsbestandteile der Eingabeaufforderungsanzeige zu ändern?

Ich habe schon so etwas von OSX-Benutzern gesehen, aber ich weiß nicht, wie ich dasselbe im Gnome-Terminal machen soll (ich kann nur die Vordergrund- und Hintergrundfarben ändern).

Es wäre sehr nützlich, wenn Sie zum Beispiel versuchen, fehlerhafte Programme zu kompilieren, da lange, unformatierte Nachrichten es schwierig machen, zu unterscheiden, welche Zeilen Befehle sind und welche ausgegeben werden.

Colors in osx terminal

103
Luiz Rodrigo

Sie können die Einstellungen bearbeiten, indem Sie die Datei bearbeiten: ~/.bashrc.

  1. Öffnen Sie die Datei: gedit ~/.bashrc.

  2. Suchen Sie die Zeile mit #force_color_Prompt=yes und entfernen Sie das Kommentarzeichen (löschen Sie den #).

  3. Suchen Sie nach der Zeile unter if [ "$color_Prompt" = yes ]; then, die wie folgt aussehen sollte:

    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
    

    Achten Sie auf den Teil \[email protected]\h, auf dem "user @ Host" steht, und die Zahl davor \[\033[01;32m\] gibt die Farbe an. Das musst du ändern. Lassen Sie uns beispielsweise den Benutzer in lila, das "@" in schwarz und den Host in grün ändern. Bearbeiten Sie die Zeile so, dass sie wie folgt aussieht:

    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;35m\]\u\[\033[01;30m\]@\[\033[01;32m\]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
    

Ergebnis:
enter image description here

Die Farbnummern sind:

 Schwarz 0; 30 Dunkelgrau 1; 30 
 Blau 0; 34 Hellblau 1; 34 
 Grün 0; 32 Hellgrün 1; 32 
 Cyan 0; 36 Hell Cyan 1; 36 
 Rot 0; 31 Hell Rot 1; 31 
 Lila 0; 35 Hell Lila 1; 35 
 Braun 0; 33 Gelb 1; 33 
 .] Hellgrau 0; 37 Weiß 1; 37 

Referenzen: 1 , 2 .

135
desgua

Sie können den BashrcGenerator ausprobieren. Dies ist bei weitem der einfachste Weg, eine Eingabeaufforderung zu erhalten, wie Sie möchten. Ich habe festgestellt, dass die hier definierten Farben möglicherweise von Ihrem eigenen System abweichen, aber das ist ein kleines Problem. Mit dem generierten Code können Sie die Farben selbst ändern.

Serverbenutzer:

export PS1="\[\e[01;37m\][\[\e[0m\]\[\e[01;32m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;34m\]\h\[\e[0m\]\[\e[00;37m\] \[\e[0m\]\[\e[00;37m\]\t\[\e[0m\]\[\e[01;37m\] \W]\\$ \[\e[0m\]"

Server root:

export PS1="\[\e[01;37m\][\[\e[0m\]\[\e[01;31m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;34m\]\h\[\e[0m\]\[\e[00;37m\] \[\e[0m\]\[\e[00;37m\]\t\[\e[0m\]\[\e[01;37m\] \W]\\$ \[\e[0m\]"

Bei Bedarf können Sie die Hostnamenfarbe ändern, um die verschiedenen Servertypen widerzuspiegeln.

Ich verwende ein anderes Format für meinen lokalen Computer:

export PS1="\[\e[01;33m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;36m\]\h\[\e[0m\]\[\e[00;37m\] \t \[\e[0m\]\[\e[01;35m\]\w\[\e[0m\]\[\e[01;37m\] > \[\e[0m\]"

Mein Favorit jetzt:

export PS1="\n\[\e[01;33m\]\u\[\e[0m\]\[\e[00;37m\]@\[\e[0m\]\[\e[01;36m\]\h\[\e[0m\]\[\e[00;37m\] \t \[\e[0m\]\[\e[01;35m\]\w\[\e[0m\]\[\e[01;37m\] \[\e[0m\]\n$ "

Diese letzte Eingabeaufforderung hat eine nette Geste. Nach der Eingabeaufforderung wird eine neue Zeile und davor eine leere Zeile eingefügt. Jetzt können Sie problemlos den vollständigen Verzeichnispfad anzeigen und bei langer Ausgabe besser erkennen, wo ein neuer Befehl beginnt.

35
SPRBRN

Für Details, siehe dieses detaillierte HOWTO .

Kurz gesagt, Sie können die Eingabeaufforderung ändern, indem Sie die Umgebungsvariable $ PS1 bearbeiten. Es gibt so viel zu sagen, dass ich Ihnen nur meine Eingabeaufforderung zeigen und Sie auf den obigen Link verweisen werde, um weitere Details zu erfahren.

Die farbbezogenen Teile befinden sich in der Funktion setPrompt:

# This function from: https://wiki.archlinux.org/index.php/Color_Bash_Prompt_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29#Wolfman.27s
##################################################
# Fancy PWD display function
##################################################
# The home directory (HOME) is replaced with a ~
# The last pwdmaxlen characters of the PWD are displayed
# Leading partial directory names are striped off
# /home/me/stuff          -> ~/stuff               if USER=me
# /usr/share/big_dir_name -> ../share/big_dir_name if pwdmaxlen=20
##################################################
bash_Prompt_shortener() {
    # How many characters of the $PWD should be kept
    local pwdmaxlen=25
    # Indicate that there has been dir truncation
    local trunc_symbol=".."
    local dir=${PWD##*/}
    pwdmaxlen=$(( ( pwdmaxlen < ${#dir} ) ? ${#dir} : pwdmaxlen ))
    NEW_PWD=${PWD/#$HOME/\~}
    local pwdoffset=$(( ${#NEW_PWD} - pwdmaxlen ))
    if [ ${pwdoffset} -gt "0" ]
    then
        NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen}
        NEW_PWD=${trunc_symbol}/${NEW_PWD#*/}
    fi
}


function setPrompt {
  COLOR1="\[\033[1;33m\]"     #First color
  COLOR2="\[\033[0;33m\]"     #Second color
  NO_COLOR="\[\033[0m\]"      #Transparent - don't change

  case $TERM in 
    xterm*)
      TITLEBAR="\[\033]0;\h - \w\007\]"
      ;;
    *)
      TITLEBAR=""
      ;;
  esac

  local dash_open="${COLOR1}-${COLOR2}-"
  local dash_close="${COLOR2}-${COLOR1}-"
  local spacer="${COLOR2}-"
  local jobs_and_history="${COLOR2}(${COLOR1}\!${COLOR2}:${COLOR1}\j${COLOR2})"
  local user_Host="${COLOR2}(${COLOR1}\u${COLOR2}@${COLOR1}\H${COLOR2})"
  local Host="${COLOR2}(${COLOR1}\H${COLOR2})"
  local root_or_not="${COLOR2}(${COLOR1}\\\$${COLOR2})"
  local cwd="${COLOR2}(${COLOR1}\w${COLOR2})"
  #PS1="${TITLEBAR}${COLOR1}-${COLOR2}-(${COLOR1}\!${COLOR2}:${COLOR1}\j${COLOR2})-(${COLOR1}\w${COLOR2})-${COLOR1}-\n-${COLOR2}-(${COLOR1}\u${COLOR2}@${COLOR1}\H${COLOR2})-(${COLOR1}\\\$${COLOR2})-${COLOR1}- ${NO_COLOR}"
  #PS1="${TITLEBAR}${dash_open}${cwd}${spacer}${root_or_not}${dash_close}\n${dash_open}${jobs_and_history}${spacer}${Host}${dash_close}${NO_COLOR} "
  #PS2="${COLOR2}--${COLOR1}- ${NO_COLOR}"
  PS1="${TITLEBAR}${COLOR1}"'${NEW_PWD}'"${COLOR2}:\$${NO_COLOR} "
  PS2="$spacer$dash_close$NO_COLOR "
}

bash_Prompt_shortener
setPrompt
unset setPrompt

#Determine and display the exit Status of the last command, if non-zero.
function checkExitStatus() {
  local status="$?"
  local signal=""
  local COLOR1="\033[0;0;33m"     #First color
  local COLOR2="\033[0;0;36m"     #Second color
  local NO_COLOR="\033[0m"        #Transparent - don't change

  if [ ${status} -ne 0 -a ${status} != 128 ]; then
    # If process exited by a signal, determine name of signal.
    if [ ${status} -gt 128 ]; then
      signal="$(builtin kill -l $((${status} - 128)) 2>/dev/null)"
      if [ "$signal" ]; then
        signal="$signal"
      fi
    fi
    echo -e "${COLOR1}[Exit ${COLOR2}${status} ${signal}${COLOR1}]${NO_COLOR}" 1>&2
    #echo -ne "${COLOR1}[Exit ${COLOR2}${status}${COLOR1} ${COLOR2}${signal}${COLOR1}]${NO_COLOR} " 1>&2
    fi
  return 0
}
print_Prompt_time() {
    printf "%*s\r" $(tput cols) "$(date '+%T')"
}

promptCmd() {
    checkExitStatus
    print_Prompt_time
}

Prompt_COMMAND=promptCmd

Zusätzlich zu den Farben verfügt meine Eingabeaufforderung über einige andere Funktionen, z. B. abgekürzte Verzeichnisnamen (siehe Funktion bash_Prompt_shortener), automatische Anzeige des Beendigungsstatus des letzten Befehls, wenn dieser nicht Null ist (Funktion checkExitStatus) und Anzeige der Zeit in den am weitesten rechts stehenden Spalten (Funktion print_Prompt_time).

6
Scott Severance