it-swarm.dev

Změna barev pro informace o uživateli, hostiteli, adresáři v příkazovém řádku terminálu

Je možné změnit barvy v příkazu Prompt pro [email protected], stejně jako aktuální část adresáře a příkazů na obrazovce Prompt?

Už jsem něco takového viděl u uživatelů OSX, ale nevím, jak udělat totéž v terminálu gnome (mohu změnit pouze barvy popředí a pozadí).

Bylo by velmi užitečné, když se například pokoušíte kompilovat programy, které mají chyby, protože dlouhé, neformátované zprávy ztěžují rozlišení, které řádky jsou příkazy a které jsou výstupem.

Colors in osx terminal

110
Luiz Rodrigo

Můžete upravit nastavení úprav souboru: ~/.bashrc.

  1. Otevřete soubor: gedit ~/.bashrc.

  2. Vyhledejte řádek s #force_color_Prompt=yes a odkomentujte (smažte #).

  3. Vyhledejte řádek pod if [ "$color_Prompt" = yes ]; then, které by mělo vypadat takto:

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

    Věnujte pozornost části \[email protected]\h to říká "user @ Host" a číslo před ním \[\033[01;32m\] označuje barvu. To je to, co musíte změnit. Například umožňuje změnit uživatele na fialovou, znak „@“ na černou a hostitel na zelenou. Upravte řádek tak, aby vypadal takto:

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

Výsledek:
enter image description here

Čísla barev jsou:

 Černá 0; 30 Tmavě šedá 1; 30 
 Modrá 0; 34 Světle Modrá 1; 34 
 Zelená 0; 32 Světle Zelená 1; 32 
 Azurová 0; 36 Světlá azurová 1; 36 
 Červená 0; 31 Světle červená 1; 31 
 Fialová 0; 35 Světlá Fialová 1; 35 
 Hnědá 0; 33 Žlutá 1; 33 
 Světle šedá 0; 37 Bílá 1; 37 

Odkazy: 1 , 2 .

140
desgua

Můžete vyzkoušet BashrcGenerator . Toto je zdaleka nejjednodušší způsob, jak získat výzvu, jak chcete. Všiml jsem si, že zde definované barvy se mohou lišit od vašeho vlastního systému, ale to je malý problém. Pomocí vygenerovaného kódu můžete měnit barvy sami.

Uživatel serveru:

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

Kořen serveru:

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

A v případě potřeby můžete změnit název hostitele tak, aby odrážel různé typy serverů.

Pro svůj místní počítač používám jiný formát:

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

Moje oblíbené nyní:

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

Tato poslední výzva má jeden pěkný dotek. Za výzvu přidá nový řádek a předchozí prázdný řádek. Nyní můžete bez problémů zobrazit úplnou cestu k adresáři a v případě dlouhého výstupu je jasnější, kde začíná nový příkaz.

37
SPRBRN

Podrobnosti viz tento podrobný návod .

Stručně řečeno, můžete změnit výzvu úpravou proměnné prostředí $ PS1. Je toho tolik, co se dá říct, že vám ukážu svůj výzvu a odkážu vám na výše uvedený odkaz, kde získáte další podrobnosti.

Části související s barvou jsou ve funkci 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

Kromě barev má můj řádek několik dalších funkcí, například zkrácené názvy adresářů (viz funkce bash_Prompt_shortener), automatické zobrazení stavu ukončení posledního příkazu, pokud není nenulové (funkce checkExitStatus), a zobrazení času v pravých sloupcích (funkce print_Prompt_time).

6
Scott Severance