Vraag Veranderen van kleuren voor gebruiker, host, directory-informatie in terminal opdrachtprompt


Is het mogelijk om de kleuren in de opdrachtprompt te wijzigen voor de user@computer, evenals de huidige directory- en opdrachtgedeelten van de promptweergave?

Ik heb al zoiets gezien door OSX-gebruikers gedaan, maar ik weet niet hoe ik hetzelfde moet doen in de gnome-terminal (ik kan alleen de voor- en achtergrondkleuren veranderen).

Het zou erg handig zijn als u bijvoorbeeld probeert programma's te compileren die fouten bevatten, aangezien lange, ongeformatteerde berichten het moeilijk maken om te onderscheiden welke regels opdrachten zijn en welke worden uitgevoerd.

Colors in osx terminal


96
2018-04-18 22:51


oorsprong


Je zoekt bash instellingen (of instellingen voor de shell van uw voorkeur), niet Gnome Terminal. - Scott Severance


antwoorden:


U kunt de instellingen bewerken die het bestand bewerken: ~/.bashrc.

  1. Open het bestand: gedit ~/.bashrc.

  2. Zoek naar de regel met #force_color_prompt=yes en uncomment (verwijder de #).

  3. Zoek naar de regel hieronder if [ "$color_prompt" = yes ]; then dat zou er als volgt uit moeten zien:

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

    Besteed aandacht aan het onderdeel \u@\h het zegt "gebruiker @ host" en het nummer ervoor \[\033[01;32m\] geeft de kleur aan. Dit is wat je moet veranderen. Stel bijvoorbeeld de gebruiker in op paars, de "@" op zwart en host op groen. Bewerk de regel zodat deze eruit ziet:

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

Resultaat:
enter image description here

De kleurnummers zijn:

Zwart 0; 30 Donkergrijs 1; 30
Blauw 0; 34 Lichtblauw 1; 34
Groen 0; 32 Licht groen 1; 32
Cyaan 0; 36 Light Cyan 1; 36
Rood 0; 31 Licht rood 1; 31
Paars 0; 35 Lichtpaars 1; 35
Bruin 0; 33 Geel 1; 33
Lichtgrijs 0; 37 Wit 1; 37

Referenties: 1, 2.


121
2018-04-19 01:56



Perfect gewerkt, bedankt :) - Luiz Rodrigo
Ik ben blij dat het werkt. Welkom. - desgua
Het is ook vermeldenswaard dat je de kleur niet moet veranderen Palette van de Terminal's Preferences voordat u dit probeert, omdat dit voor veel verwarring met de kleurcodes zorgt. - Rifaz Nahiyan


Je kunt het proberen BashrcGenerator. Dit is veruit de gemakkelijkste manier om een ​​prompt te krijgen zoals u dat wilt. Ik heb gemerkt dat de hier gedefinieerde kleuren verschillen van je eigen systeem, maar dat is een klein probleem. Met de gegenereerde code kunt u de kleuren zelf wijzigen.

Server gebruiker:

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\]"

En indien nodig kunt u de hostnaamkleur wijzigen om verschillende typen servers weer te geven.

Ik gebruik een ander formaat voor mijn lokale 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\]"

Mijn favoriet nu:

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$ "

Deze laatste prompt heeft een leuke touch. Het voegt een nieuwe regel toe na de prompt en een lege nieuwe regel eerder. Nu kunt u zonder problemen het volledige directorypad weergeven en wordt het duidelijker waar een nieuwe opdracht begint, in geval van lange uitvoer.


31
2017-11-13 11:59



PS1-generator: +1: D - anishsane
Ik vond de vorige echt heel leuk, ik was ongerust omdat de gebruikersnaam en het pad veel ruimte in beslag namen, met de laatste optie kun je het hele scherm krijgen - Damian Lattenero
Dit werkte prima! Hoe kan ik dit echter doen voor specifieke hosts? d.w.z. een specifiek kleurenschema instellen als ik bijvoorbeeld in een productieserver ss? moet ik het doen "handmatig" met if-fi blokkeert in .bashrc? of is er een elegantere manier? - Acapulco


Voor details, zie deze gedetailleerde HOWTO.

Kortom, je kunt de prompt wijzigen door de $ PS1-omgevingsvariabele te bewerken. Er is hier zoveel te zeggen, dat ik je mijn prompt laat zien en je doorverwijs naar de bovenstaande link voor meer details.

De kleurgerelateerde onderdelen zitten in de functie 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

Naast kleuren heeft mijn prompt nog enkele andere functies, zoals verkorte directorynamen (zie de functie bash_prompt_shortener), automatische weergave van de exit-status van de laatste opdracht indien niet-nul (functie checkExitStatus) en weergave van de tijd in de meest rechterkolommen (functie print_prompt_time).


6
2018-04-19 00:27



Bedankt voor het delen van je aangepaste functies :) Is het alleen met mij dat de tijdstempel verdwijnt wanneer ik op backspace druk? - Luiz Rodrigo
Nee. Ik ook. Er is een bug die ik niet belangrijk genoeg heb beoordeeld om te proberen te repareren. - Scott Severance