¿Cómo personalizar .bashrc para configurar el símbolo del sistema?

8

¿Hay una manera fácil de cambiar mi solicitud de Bash para modificar los colores y qué texto se muestra? Escuché que esto se hace .bashrc, pero no he encontrado ninguna manera agradable y fácil de modificarlo. ¿Cómo se expresan los colores en Bash?

Naftuli Kay
fuente
Asegúrese de navegar bash+prompt, aunque no creo que tengamos un tutorial allí.
Gilles 'SO- deja de ser malvado'
2
Hay una buena guía para configurar un indicador de color bash en la wiki de Arch Linux , que incluye una lista de colores y algunos buenos ejemplos.
jasonwryan

Respuestas:

4

Una vez solía tener los definidos en mi .bashrc:

export e="\e["

function cls          { echo -n "${e}H${e}J${e}0m"; }
function rcls         { echo -n "${e}H${e}J${e}S${e}H${e}J${e}0m${e}u${e}J"; } # not quite yet !
# rcls only works when no funny codes have been issued in between, i.e. the buffer is clean
# below the current screen. And then there can be issues with the first line of the buffer.

function bright       { echo -n "${e}1m"; }
function normal       { echo -n "${e}0m"; }
function colour       { echo -n "${e}$1;$2;$3m"; }
function black        { echo -n "${e}30m"; }
function bg_black     { echo -n "${e}40m"; }
function red          { echo -n "${e}31m"; }
function bg_red       { echo -n "${e}41m"; }
function green        { echo -n "${e}32m"; }
function bg_green     { echo -n "${e}42m"; }
function yellow       { echo -n "${e}33m"; }
function bg_yellow    { echo -n "${e}43m"; }
function blue         { echo -n "${e}34m"; }
function bg_blue      { echo -n "${e}44m"; }
function magenta      { echo -n "${e}35m"; }
function bg_magenta   { echo -n "${e}45m"; }
function cyan         { echo -n "${e}36m"; }
function bg_cyan      { echo -n "${e}46m"; }
function white        { echo -n "${e}37m"; }
function bg_white     { echo -n "${e}47m"; }
function c_up         { echo -n "${e}$1A"; }
function c_down       { echo -n "${e}$1B"; }    # within
function c_right      { echo -n "${e}$1C"; }
function c_left       { echo -n "${e}$1D"; }    # screen
function c_pos        { echo -n "${e}$1;$2f"; } # [Hf]
function c_line       { echo -n "${e}$1d"; }
function screentop    { echo -n "${e}H"; }      # [Hdf]
function linetop      { echo -n "${e}G"; }
function buffertop    { echo -n "${e}u"; }      # depends on other control characters ?
function tab          { echo -n "${e}I"; }
function backtab      { echo -n "${e}Z"; }
function scrolldown   { echo -n "${e}$1T"; }    # within screen
function scrolldown_B { echo -n "${e}$1L"; }    # scroll down below cursor
function scrollup_B   { echo -n "${e}$1M"; }    # scroll up below cursor
function clear        { echo -n "${e}J"; }      # delete to end of screen
function cleanbuffer  { echo -n "${e}S"; }      # copies first screen to bottom and clears
                                                # everything else above the cursor.
#function xxx { echo -n "${e}xxx"; }

export -f bright normal colour
export -f black bg_black red bg_red green bg_green yellow bg_yellow
export -f blue bg_blue magenta bg_magenta cyan bg_cyan white bg_white
export -f c_up c_down c_right c_left c_pos c_line
export -f screentop linetop buffertop tab backtab
export -f scrolldown scrolldown_B scrollup_B clear cleanbuffer

Luego puede usarlos, por ejemplo, con:

PS1_init="\n$(bright)$(black)$(hostname):\w\n$(bg_blue)"
PS1_end="$(normal)$(bright)\n\! -> $(normal)$(clear)"
export PS1="$PS1_init"'$(date)'"$PS1_end"

Estos pueden ayudarte.

La razón por la que los convertí en funciones en lugar de variables es la pereza. Solo quería dejar de escribir. Por supuesto, si buscas variables de eficiencia, sería mejor.

Al final del día, aunque estos solo se ajustan a ciertas terminales. Entonces, para cualquier ayuda, consulte la documentación de su terminal, no la de bash o cualquier otro shell.

asoundmove
fuente
¡Una de las mejores definiciones bashrc que he visto hasta ahora!
theTuxRacer
1
Las variables ahorrarían al escribir: bright=$'\e1m'y así sucesivamente. (A menos que necesite compatibilidad con versiones muy antiguas que no tienen la $'…'sintaxis.)
Gilles 'SO- deja de ser malvado'
@Gilles, entendiste mal: prefiero escribir blueen el indicador (o en un script de shell) que echo $blue.
asoundmove
2

Bash utiliza el esquema de color Ansi - Artículo de Wikipedia: http://en.wikipedia.org/wiki/ANSI_escape_code#Colors

Por ejemplo, aquí está mi mensaje: (Me gusta mi mensaje en una línea separada, pero no todos lo hacen. Además, mis términos tienen un fondo oscuro; ajuste los colores si sus términos son claros).

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[31m\]\h \[\e[0;36m\]\t \[\e[93m\]\w\[\e[36m\] p$$-\!-\$\[\e[0m\]\n\$ '

Los valores de solicitud especiales se describen en la página de manual de Bash en "Solicitud":

\u  the username of the current user
\h  the hostname up to the first `.'
\t  the current time in 24-hour HH:MM:SS format
\w  the current working  directory,  with 
    $HOME  abbreviated with  a tilde
    (uses the value of the PROMPT_DIRTRIM variable)
$$  PID of the Bash (helps distinguish my many terms.
    Useful, eg, if I have to kill something.
\!  the history number of this command
\n     newline
\$  if the effective UID is 0, a #, otherwise a $
LenW
fuente
1
Bash no usa el esquema de color ansi. Es la terminal la que implementa los códigos de escape. Bash funcionará en cualquier terminal, por lo que es mejor usarlo tput setf _n_para obtener el código de escape para establecer el color de primer plano.
camh
0

por ejemplo para colorear puedes hacer esto:

Simplemente agregue la siguiente línea:

export PS1=" \[\033[34m\]\u@\h \[\033[33m\]\w\[\033[31m\]\[\033[00m\] $ "

Avance: ingrese la descripción de la imagen aquí

Este es mi color preferido. Puede personalizar cada parte del color de la solicitud cambiando los mcódigos (p 34m. Ej. ) Que son códigos de color ANSI.

Lista de códigos de colores ANSI:

  • Negro: 30m
  • Rojo: 31m
  • Verde: 32m
  • Amarillo: 33m
  • Azul: 34m
  • Púrpura: 35m
  • Cian: 36m
  • Blanco: 37m
Shayan Amani
fuente
0

Ninguna de estas respuestas me ayudó a aprender cómo funciona la personalización rápida. Esto es lo que obtuve de unas horas de búsqueda en diferentes foros, pilas, wikis, etc.

Encuentra tu mensaje

nano ~/.bashrc

Busca en tu bashrcpara PS1, ya sea manualmente o con Alt + F . Este es el primer indicador de bash, lo que ves cuando ingresas un comando. PS[2-4]También existen, pero rara vez se utilizan.

Definir colores

Sobre su PS1línea, agregue estas definiciones de color:

# Color Variables
c1='\[\033[0;30m\]' # Non-bold color 1
C1='\[\033[1;30m\]' # Bold color 1
c2='\[\033[0;31m\]' # Non-bold color 2
C2='\[\033[1;31m\]' # Bold color 2
c3='\[\033[0;32m\]' # Non-bold color 3
C3='\[\033[1;32m\]' # Bold color 3
c4='\[\033[0;33m\]' # Non-bold color 4
C4='\[\033[1;33m\]' # Bold color 4
c5='\[\033[0;34m\]' # Non-bold color 5
C5='\[\033[1;34m\]' # Bold color 5
c6='\[\033[0;35m\]' # Non-bold color 6
C6='\[\033[1;35m\]' # Bold color 6
c7='\[\033[0;36m\]' # Non-bold color 7
C7='\[\033[1;36m\]' # Bold color 7
c8='\[\033[0;37m\]' # Non-bold color 8
C8='\[\033[1;37m\]' # Bold color 8
NC='\[\033[0m\]'    # Back to default color

Configurar colores

Ahora, en algún lugar de su terminal (presumiblemente gráfico), debería tener alguna opción de personalización. Por ejemplo, estoy usando Konsole de KDE : Settings > Edit Current Profile... > Appearance > Edit...muestra esta interfaz de personalización:

Personalización de colores Konsole

Ahora cámbielos a los colores que desee. Tu primer plano es tu color predeterminado, y los colores 1 ~ 8 son los que definiste que puedes elegir. No es que las definiciones estén basadas en 0 mientras que esta personalización y sus variables están basadas en 1.

Usa los colores en tu solicitud

Para mi solicitud predeterminada, tengo:

PS1="[\u@\h \W]\$ "

\ues su u sername, \hes su h ostname, \Wes W aquí estás (que directorio), y \$es esa cosa rápida ( #cuando userid = 0 [root]).

Puede personalizar esto agregando $c1$ c2`, etc. delante del color que desea cambiar. Por ejemplo, tengo:

PS1="$c2[$C8\u$c2@$C7\h $C6\W$c2]$C2\$$NC "

Esto resulta en:

Mi bash prompt

Nota: Debe usarlo NCal final para restablecerlo a su color predeterminado, de lo contrario, todo después de su solicitud (su entrada) será el último color de su solicitud.

Raymo111
fuente