Cambio de colores para el usuario, el host, la información del directorio en el indicador de comandos del terminal

98

¿Es posible cambiar los colores en el símbolo del sistema para el user@computer , así como las partes del directorio y comando actuales de la pantalla del sistema?

Los usuarios de OSX ya han visto algo como esto, pero no sé cómo hacer lo mismo en el terminal gnome (solo puedo cambiar los colores de fondo y de primer plano).

Sería muy útil cuando, por ejemplo, tratar de compilar programas que tienen errores, ya que los mensajes largos y sin formato dificultan la distinción de qué líneas son comandos y cuáles de salida.

    
pregunta Luiz Rodrigo 19.04.2012 - 00:51

3 respuestas

123

Puede editar la configuración editando el archivo: ~/.bashrc .

  1. Abra el archivo: gedit ~/.bashrc .

  2. Busque la línea con #force_color_prompt=yes y descomente (elimine # ).

  3. Busque la línea debajo de if [ "$color_prompt" = yes ]; then que debería ser:

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

    Preste atención a la parte \u@\h que dice "usuario @ host" y el número antes de que \[3[01;32m\] indique el color. Esto es lo que tienes que cambiar. Por ejemplo, cambiemos el usuario a púrpura, el "@" a negro y el host a verde. Edita la línea para que se vea como:

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

Resultado:

Losnúmerosdecoloresson:

Black0;30DarkGray1;30Blue0;34LightBlue1;34Green0;32LightGreen1;32Cyan0;36LightCyan1;36Red0;31LightRed1;31Purple0;35LightPurple1;35Brown0;33Yellow1;33LightGray0;37White1;37

Referencias: 1 , 2 .

    
respondido por el desgua 19.04.2012 - 03:56
33

Puedes probar el BashrcGenerator . Esta es, con mucho, la forma más fácil de obtener un aviso como usted desea. Me he dado cuenta de que los colores definidos aquí pueden ser diferentes de su propio sistema, pero eso es un problema menor. Con el código generado puedes cambiar los colores tú mismo.

Usuario del servidor:

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

Raíz del servidor:

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

Y si es necesario, puede cambiar el color del nombre de host para reflejar diferentes tipos de servidores.

Uso un formato diferente para mi computadora local:

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

Mi favorito ahora:

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

Este último mensaje tiene un toque agradable. Agrega una nueva línea después del aviso, y una nueva línea vacía antes. Ahora puede visualizar la ruta completa del directorio sin problemas, y deja más claro dónde comienza un nuevo comando, en caso de una salida larga.

    
respondido por el SPRBRN 13.11.2014 - 12:59
6

Para obtener más información, vea este CÓMO detallado .

En resumen, puede modificar el indicador editando la variable de entorno $ PS1. Hay tanto que decir aquí, que solo le mostraré mi mensaje y lo remitiré al enlace de arriba para obtener más detalles.

Las partes relacionadas con el color están en la función 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="\[3[1;33m\]"     #First color
  COLOR2="\[3[0;33m\]"     #Second color
  NO_COLOR="\[3[0m\]"      #Transparent - don't change

  case $TERM in 
    xterm*)
      TITLEBAR="\[3]0;\h - \w# 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="\[3[1;33m\]"     #First color
  COLOR2="\[3[0;33m\]"     #Second color
  NO_COLOR="\[3[0m\]"      #Transparent - don't change

  case $TERM in 
    xterm*)
      TITLEBAR="\[3]0;\h - \w%pre%7\]"
      ;;
    *)
      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="3[0;0;33m"     #First color
  local COLOR2="3[0;0;36m"     #Second color
  local NO_COLOR="3[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
7\]" ;; *) 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="3[0;0;33m" #First color local COLOR2="3[0;0;36m" #Second color local NO_COLOR="3[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

Además de los colores, mi indicador tiene algunas otras características, como nombres de directorio abreviados (ver la función bash_prompt_shortener ), visualización automática del estado de salida del último comando si no es cero (función checkExitStatus ) y visualización de la hora en las columnas de la derecha (función print_prompt_time ).

    
respondido por el Scott Severance 19.04.2012 - 02:27

Lea otras preguntas en las etiquetas