Soy un gran fan de la terminal: ya sea que esté aprovechando un puñado de comandos (¡o más!) Para mejorar su proceso de desarrollo, o simplemente lo esté utilizando para moverse rápidamente por sus unidades y abrir archivos y carpetas, la línea de comandos es una herramienta impresionante Sin embargo, si lo usa a menudo, querrá personalizarlo según sus necesidades. Te mostraré cómo hacerlo hoy!
A menudo me preguntan: "¿Cómo conseguiste que tu símbolo del sistema se viera así?" Bueno, en este tutorial, te mostraré exactamente cómo hacerlo. Es bastante simple y no requerirá mucho tiempo..
Debo tener en cuenta que lo que les muestro es específicamente para el shell bash; Este es el shell predeterminado en Mac y en la mayoría de los sistemas Linux. Si desea un mensaje de bash en Windows, es posible que desee revisar Cygwin.
Antes de comenzar, hablemos por un minuto sobre cómo personalizar el indicador de bash. No es exactamente lo mismo que una aplicación promedio: no hay panel de preferencias. Sus personalizaciones se almacenan en un archivo. Si estás en Linux (o estás usando Cygwin), ese será tu .Bashrc
expediente; en Mac, esa es tu .bash_profile
expediente. En ambos casos, este archivo se guarda en su directorio de inicio (si no está seguro de cuál es la instalación de Cygwin, ejecute el comando echo $ HOME
). Tenga en cuenta que sólo me referiré a la .Bashrc
archivo de aquí en adelante, pero use el .bash_profile
si estás en una Mac.
Tenga en cuenta que en Mac (y posiblemente en máquinas Linux; no estoy seguro), los archivos que comienzan con un período están ocultos de manera predeterminada. Para mostrarlos, ejecuta estas dos líneas en la terminal.
los valores predeterminados escriben com.apple.finder AppleShowAllFiles VERDADERO killall Finder
Entonces, ¿qué hay en eso? .Bashrc
¿expediente? Cada línea es en realidad un comando que puede ejecutar en la línea de comandos. De hecho, así es como funcionan estos archivos de configuración: cuando abre la consola, se ejecutan todos los comandos que ha escrito en el archivo de configuración, configurando su entorno. Entonces, si solo quieres probar algo de lo que mostraré a continuación, solo escríbelo en la propia línea de comandos. La simplicidad aquí es hermosa..
PS1
Vamos a empezar con una definición. los rápido es lo que ve al principio de la línea, cada vez que pulsa enter en la línea de comando. Aquí están las configuraciones predeterminadas para Mac:
En este caso, el aviso es andrews-macbook: ~ screencast $
. Aquí hay algunas variables: andrew-macbook
es el nombre de esta computadora, ~
es el directorio actual (el directorio de inicio) y screencast
es el nombre de usuario. Vamos a personalizar esto un poco.
Abre ya sea tu .Bashrc
expediente. La forma en que configuramos la información que se muestra en la solicitud es con la PS1
variable. Agregue esto al archivo:
PS1 = '->'
Observe que no pongo espacios a los lados del signo igual; eso es necesario Guarde este archivo en su directorio de inicio y vuelva a abrir una ventana de terminal. Ahora, deberías tener un aviso que se vea así:
Notaré aquí que si encuentra tedioso cerrar y volver a abrir su terminal cada vez que realice un cambio en su .Bashrc
o .bash_profile
, hay un poco de acceso directo: puede cargar cualquier archivo de personalización de bash con el fuente
mando. Ejecuta esto en tu terminal:
fuente ~ / .bashrc
¿Todavía es demasiado largo? Bueno, un solo periodo (.
) es un alias para fuente
. ¿Feliz ahora? Si eres rápido, te darás cuenta de que podemos usar el fuente
comando para incluir otros archivos dentro de nuestra .Bashrc
archivo, si desea dividirlo para mantenerlo bajo control.
Vamos a personalizar nuestro mensaje un poco más. Podemos usar variables incorporadas en la cadena que asignamos a PS1
para incluir información útil en el mensaje; Aquí hay algunos útiles:
\re
: Fecha\ h
: Anfitrión\norte
: Nueva línea\ t
: Hora\ u
: Nombre de usuario\ W
: Directorio de trabajo actual\ w
: Ruta completa al directorio actualPor lo tanto, si configura su solicitud a esto:
PS1 = '\ n \ W \ n [\ h] [\ u] ->'
Debería ver algo como esto:
Observe algunas cosas aquí: en primer lugar, estamos usando un grupo de las variables que se muestran arriba para brindarnos más información. Pero en segundo lugar, incluimos algunas líneas nuevas y obtenemos una solicitud más interesante: tenemos el directorio actual en una línea y luego la solicitud real en la siguiente línea. Prefiero mi solicitud de esta manera, porque siempre tengo la misma cantidad de espacio para escribir mis comandos, sin importar cuánto tiempo sea la ruta al directorio actual. Sin embargo, hay una mejor manera de hacer esto, así que veamos eso ahora.
PROMPT_COMMAND
La mejor manera de hacer esto es usar el PROMPT_COMMAND
variable; El contenido de esta variable no es solo una cadena, como con PS1
. En realidad, es un comando que se ejecuta antes de que bash muestre el indicador. Para intentarlo, añadamos esto a nuestro .Bashrc
:
PROMPT_COMMAND = 'echo "aparece antes de la solicitud"'
Estamos usando el eco
comando aquí Si no está familiarizado con él, simplemente le pasa una cadena y la escribirá en el terminal. Por sí mismo, no es increíblemente útil (aunque puede usarlo para ver las variables: echo $ PS1
), pero es genial cuando se usa con otros comandos, así que muestra su salida. Si agregó la línea anterior, debería ver esto:
Hagamos algo más útil aquí. Vamos a escribir una función bash que asignaremos a PROMPT_COMMAND
. Prueba esto:
print_before_the_prompt () echo "aparece antes de la solicitud" PROMPT_COMMAND = print_before_the_prompt
Si usa esto, no debería ver una diferencia en su solicitud de lo que tenemos arriba. Ahora, hagamos esto útil.
print_before_the_prompt () echo "$ USER: $ PWD" PROMPT_COMMAND = print_before_the_prompt PS1 = "->"
Esto es lo que obtendrás:
Es un buen comienzo, pero quiero hacer un poco más. Voy a usar el printf
comando en lugar de eco
Porque hace un poco más fácil incluir nuevas líneas y variables. Un fondo rápido en el printf
comando: toma varios parámetros, el primero es un tipo de plantilla para la cadena que se emitirá. Los otros parámetros son valores que se sustituirán en la cadena de la plantilla cuando sea apropiado; ya veremos como funciona esto.
Así que vamos a hacer esto:
print_before_the_prompt () printf "\ n% s:% s \ n" "$ USER" "$ PWD"
Ver esos % s
partes allí? Eso significa "interpretar el valor de este punto como una cadena"; Para el contexto, también podríamos usar %re
para formatear el valor como un número decimal. Como puedes ver, tenemos dos % s
s en la plantilla? cadena, y otros dos parámetros. Estos serán colocados en la cadena donde el % s
s son Además, note las nuevas líneas al principio y al final: la primera simplemente le da a la terminal algo de espacio para respirar. El último se asegura de que el aviso (PS1
) se imprimirá en la siguiente línea, y no en la misma línea que PROMPT_COMMAND
.
Deberías obtener un terminal como este:
¡Luciendo bien! Pero vamos un paso más allá. Vamos a añadir un poco de color a esto. Podemos usar algunos códigos especiales para cambiar el color del texto en el terminal. Puede ser bastante desalentador usar el código real, así que me gusta copiar esta lista de variables para el color y agregarla en la parte superior de mi .Bashrc
expediente:
txtblk = '\ e [0; 30m' # Negro - Regular txtred = "\ e [0; 31m" # Rojo txtgrn = "\ e [0; 32m" # Verde txtylw = "\ e [0; 33m" # Amarillo txtblu = "\ e [0; 34m" # Blue txtpur = "\ e [0; 35m" # Purple txtcyn = "\ e [0; 36m" # Cyan txtwht = "\ e [0; 37m" # White bldblk = "\ e [1; 30m" # Black - Bold bldred = "\ e [1; 31m" # Red bldgrn = "\ e [1; 32m" # Green bldylw = "\ e [1; 33m" # Yellow bldblu = "\ e [1; 34m" # Blue bldpur = "\ e [1; 35m" # Purple bldcyn = "\ e [1; 36m" # Cyan bldwht = "\ e [1; 37m" # White unkblk = "\ e [4; 30m "# Negro - Subrayado undred =" \ e [4; 31m "# Red undgrn =" \ e [4; 32m "# Green undylw =" \ e [4; 33m "# Yellow undblu =" \ e [4; 34m "# Blue undpur =" \ e [4; 35m "# Purple undcyn =" \ e [4; 36m "# Cyan undwht =" \ e [4; 37m "# White bakblk =" \ e [ 40m "# Negro - Fondo bakred =" \ e [41m "# Red badgrn =" \ e [42m "# Green bakylw =" \ e [43m "# Yellow bakblu =" \ e [44m "# Blue bakpur =" \ e [45m "# Purple bakcyn =" \ e [46m "# Cyan bakwht =" \ e [47m "# White txtrst =" \ e [0m "# Reset de texto
Hay un método para esta locura: el primer conjunto es activar la coloración normal. El segundo set gira sobre colores llamativos. El tercer set gira en coloración subrayada. Y ese cuarto set enciende el color de fondo. Ese último reajusta la coloración a normal. Entonces, usemos estos!
print_before_the_prompt () printf "\ n $ txtred% s: $ bldgrn% s \ n $ txtrst" "$ USER" "$ PWD"
Aquí, he añadido $ txtred
antes de la primera % s
, y $ bldgrn
antes del segundo % s
; luego, al final, he restablecido el color del texto. Tienes que hacer esto porque una vez que configuras un color, se mantendrá hasta que uses un nuevo color o reinicies el color. También notará que al configurar una variable, no la colocamos con un signo de dólar; pero usamos el signo de dólar cuando usamos la variable: esa es la forma en que funcionan las variables bash. Esto nos da lo siguiente:
Continuemos con el paso final: agregar algunas secuencias de comandos para darnos aún más información.
Si has visto los screencasts que vienen con mi libro Getting Good with Git, puedes recordar que tengo información de control de versión en mi indicador. Tengo esta idea del excelente PeepCode? Advanced Command Line? Screencast, que comparte esto, así como muchos otros grandes consejos.
Para hacer esto, vamos a necesitar descargar y compilar el script que encuentra esta información. Diríjase al repositorio de vcprompt, un script que genera la información de control de versión. Si está familiarizado con el sistema de control de versiones de Mercurial, puede usarlo para obtener el repositorio, pero lo más probable es que desee golpear ese enlace 'zip' para descargar el código del script como un archivo zip. Una vez que lo descomprimas, deberás construir el script. Para hacer esto, solo discos compactos
en la carpeta del script descomprimido y ejecute el comando hacer
. Una vez que se ejecuta este comando, debería ver un archivo llamado 'vcprompt' en la carpeta. Este es el script ejecutable..
Entonces, ¿cómo usamos esto en nuestro mensaje? Bueno, esto trae a colación un importante rastro de conejos: ¿cómo instalamos? ¿Un script (como este) para que podamos usarlo en el terminal? Todos los comandos que puede ejecutar en el terminal se encuentran en un conjunto definido de carpetas; esta matriz es la variable PATH. Puede ver una lista de las carpetas actualmente en su RUTA ejecutando echo $ PATH
. Podría verse algo como esto:
/ usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / X11 / bin
Lo que tenemos que hacer es poner el script ejecutable. vcprompt
en una carpeta que está en nuestro camino. Lo que me gusta hacer (y sí, también aprendí este truco de ese screencast de PeepCode) es crear una carpeta llamada 'bin' (abreviatura de 'binario') en mi directorio de inicio y agregar esa carpeta a mi PATH. Agrega esto a tu .Bashrc
:
export PATH = ~ / bin: $ PATH
Esto establece PATH en ~ / bin
, más todo lo que ya estaba en la variable PATH. Si ahora ponemos eso vcprompt
script en ~ / bin, podremos ejecutarlo en cualquier carpeta del terminal.
Entonces, ahora vamos a agregar esto a nuestro mensaje:
print_before_the_prompt () printf "\ n $ txtred% s: $ bldgrn% s $ txtpur% s \ n $ txtrst" "$ USER" "$ PWD" "$ (vcprompt)"
he añadido $ txtpur% s
a la? plantilla? cadena, y agregó el cuarto parámetro"$ (vcprompt)"
. El uso del signo de dólar y el paréntesis ejecutará el script y devolverá la salida. Ahora, obtendrás esto:
Tenga en cuenta que si la carpeta no utiliza algún tipo de control de versión, no se muestra nada. Pero, si estamos en un repositorio, obtenemos el sistema de control de versiones que se está utilizando (Git, en mi caso) y el nombre de la rama. Puede personalizar esta salida un poco, si lo desea: compruebe el archivo Léame que descargó con el código fuente para la vcprompt
guión.
Aquí está nuestra completa .Bashrc
o .bash_profile
expediente:
export PATH = ~ / bin: $ PATH txtblk = "\ e [0; 30m" # Black - Regular txtred = "\ e [0; 31m" # Red txtgrn = "\ e [0; 32m" # Green txtylw = " \ e [0; 33m "# Yellow txtblu =" \ e [0; 34m "# Blue txtpur =" \ e [0; 35m "# Purple txtcyn =" \ e [0; 36m "# Cyan txtwht =" \ e [0; 37m "# White bldblk =" \ e [1; 30m "# Black - Bold bldred =" \ e [1; 31m "# Red bldgrn =" \ e [1; 32m "# Green bldylw =" \ e [1; 33m "# Yellow bldblu =" \ e [1; 34m "# Blue bldpur =" \ e [1; 35m "# Purple bldcyn =" \ e [1; 36m "# Cyan bldwht =" \ e [1 ; 37m "# White unkblk =" \ e [4; 30m "# Black - Underline undred =" \ e [4; 31m "# Red undgrn =" \ e [4; 32m "# Green undylw =" \ e [4 ; 33m "# Yellow undblu =" \ e [4; 34m "# Blue undpur =" \ e [4; 35m "# Purple undcyn =" \ e [4; 36m "# Cyan undwht =" \ e [4; 37m "# White bakblk =" \ e [40m "# Negro - Fondo bakred =" \ e [41m "# Red badgrn =" \ e [42m "# Green bakylw =" \ e [43m "# Yellow bakblu =" \ e [44m "# Blue bakpur =" \ e [45m "# Purple bakcyn =" \ e [46m "# Cyan bakwht =" \ e [47m "# White txtrst =" \ e [0m "# Text Reset print_before_the_prompt () printf "\ n $ txtred% s: $ bldgrn% s $ txtpur% s \ n $ txtrst" "$ USER" "$ PWD" "$ (vcprompt) " PROMPT_COMMAND = print_before_the_prompt PS1 =" -> "
Bueno, ese es un curso intensivo sobre la personalización de su mensaje bash. Si tiene alguna pregunta, asegúrese de dejarla en los comentarios.!