Cómo personalizar la línea de comandos
Spanish (Español) translation by steven (you can also view the original English article)
Soy un gran admirador de la terminal: ya sea que estés aprovechando un puñado de comandos (¡o más!) para mejorar tu proceso de desarrollo, o simplemente usándolo para moverte rápidamente por tus unidades y abrir archivos y carpetas, la línea de comandos es una herramienta asombrosa. Sin embargo, si la usas con frecuencia, querrás personalizarla según tus necesidades. ¡Te mostraré cómo hacer eso hoy!
A menudo me preguntan: "¿Cómo lograste 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á demasiado tiempo.
Debo señalar que lo que les estoy mostrando es específicamente para el shell bash; este es el shell predeterminado en Mac y la mayoría de los sistemas Linux. Si deseas un indicador de bash en Windows, es posible que desees consultar Cygwin.
¿Cómo funciona?
Antes de comenzar, hablemos por un minuto sobre cómo personalizar el indicador de bash. No es exactamente lo mismo que una aplicación normal: no hay panel de preferencias. Tus personalizaciones se almacenan en un archivo. Si estás en Linux (o usando Cygwin), ese será tu archivo .bashrc
; en Mac, ese es tu archivo .bash_profile
. En ambos casos, este archivo se guarda en tu directorio de inicio (si no estás seguro de dónde está para una instalación de Cygwin, ejecuta el comando echo $HOME
). Ten en cuenta que solo me referiré al archivo .bashrc
de aquí en adelante, pero usa el .bash_profile
si estás en una Mac.
Ten en cuenta que en Mac (y posiblemente en máquinas Linux; no estoy seguro), los archivos que comienzan con un punto están ocultos de forma predeterminada. Para mostrarlos, ejecuta estas dos líneas en la terminal:
defaults write com.apple.finder AppleShowAllFiles TRUE killall Finder
Entonces, ¿qué hay en ese archivo .bashrc
? Cada línea es en realidad un comando que puedes ejecutar en la línea de comandos. De hecho, así es como funcionan estos archivos de configuración: Cuando abres la consola, todos los comandos que has escrito en el archivo de configuración se ejecutan, configurando tu entorno. Entonces, si solo deseas probar algo de lo que mostraré a continuación, simplemente escríbelo en la línea de comandos. La simplicidad aquí es hermosa.
Personalización de PS1
Comencemos con una definición. El indicador o prompt es lo que ves al principio de la línea, cada vez que presionas enter en la línea de comandos. Estos son los ajustes predeterminados para Mac:



En este caso, el prompt 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. Personalicemos esto un poco.
Abre tu archivo .bashrc
. La forma en que configuramos la información que se muestra en el indicador es con la variable PS1
. Agrega esto al archivo:
PS1='->'
Observa que no pongo espacios a ambos lados del signo igual; eso es necesario. Guarda este archivo en tu directorio personal y vuelve a abrir una ventana de terminal. Ahora, deberías tener un mensaje similar a este:



Notaré aquí que si te resulta tedioso cerrar y volver a abrir tu terminal cada vez que realizas un cambio en su .bashrc
o .bash_profile
, hay un pequeño atajo: puedes cargar cualquier archivo de personalización de bash con el comando source
. Ejecuta esto en tu terminal:
source ~/.bashrc
¿Aún es demasiado tiempo? Bueno, un solo punto (.
) Es un alias de source
. ¿Feliz ahora? Si es rápido, te darás cuenta de que podemos usar el comando source
para incluir otros archivos dentro de nuestro archivo .bashrc
, si deseas dividirlo para mantener el control.
Personalicemos nuestro prompt un poco más. Podemos usar variables integradas en la cadena que asignamos a PS1
para incluir información útil en el indicador; aquí hay algunos útiles:
-
\d
: Fecha -
\h
: Servidor -
\n
: Nueva línea -
\t
: Tiempo -
\u
: Nombre de usuario -
\W
: Directorio de trabajo actual -
\w:
Ruta completa al directorio actual
Entonces, si configuras tu prompt en esto:
PS1='\n\W\n[\h][\u]->'
deberías ver algo como esto:



Observa algunas cosas aquí: en primer lugar, estamos usando un montón de las variables que se muestran arriba para darnos más información. Pero en segundo lugar, incluimos algunas líneas nuevas allí, y obtenemos un mensaje más interesante: tenemos el directorio actual en una línea y luego el mensaje real en la siguiente línea. Prefiero mi mensaje de esta manera, porque siempre tengo la misma cantidad de espacio para escribir mis comandos, sin importar cuán larga sea la ruta al directorio actual. Sin embargo, hay una mejor manera de hacer esto, así que veamos eso ahora.
Personalizando PROMPT_COMMAND
La mejor manera de hacer esto es usando la variable PROMPT_COMMAND
; el contenido de esta variable no es solo una cadena, como en PS1
. En realidad, es un comando que se ejecuta antes de que bash muestre el indicador. Para probar esto, agreguemos esto a nuestro .bashrc
:
PROMPT_COMMAND='echo "comes before the prompt"'
Estamos usando el comando echo
aquí; si no estás familiarizado con él, simplemente pásale una cadena y lo escribirá en la terminal. Por sí mismo, no es increíblemente útil (aunque puedes usarlo para ver variables: echo $PS1
), pero es genial cuando se usa con otros comandos, así que muestra su salida. Si agregaste la línea anterior, deberías ver esto:



Hagamos algo más útil aquí. Escribamos una función bash que asignaremos a PROMPT_COMMAND
. Prueba esto:
print_before_the_prompt () { echo "comes before the prompt" } PROMPT_COMMAND=print_before_the_prompt
Si usas esto, no deberías ver una diferencia en tu prompt 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 comando printf
en lugar de echo
porque facilita un poco la inclusión de nuevas líneas y variables. Un resumen rápido del comando printf
: toma varios parámetros, el primero es una especie de plantilla para la cadena que se generará. Los otros parámetros son valores que se sustituirán en la cadena de la plantilla cuando corresponda; veremos cómo funciona esto.
Así que hagamos esto:
print_before_the_prompt () { printf "\n%s: %s\n" "$USER" "$PWD" }
¿Ves esas partes de %s
ahí? Eso significa "interpretar el valor de este lugar como una cadena"; para el contexto, también podríamos usar %d
para formatear el valor como un número decimal. Como puedes ver, tenemos dos %s
en la cadena de "template" y otros dos parámetros. Estos se colocarán en la cadena donde están los %s
. Además, observa las nuevas líneas al principio y al final: la primera solo le da a la terminal algo de espacio para respirar. El último asegura que el mensaje (PS1
) se imprimirá en la siguiente línea y no en la misma línea que PROMPT_COMMAND
.
Deberías obtener una terminal como esta:



Añadiendo algo de color
¡Se ve bien! Pero vayamos un paso más allá. Agreguemos algo de color a esto. Podemos utilizar algunos códigos especiales para cambiar el color del texto en el terminal. Puede ser bastante abrumador 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 archivo .bashrc
:
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' # Black - Background 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
Hay algún método para esta locura: el primer conjunto es activar el color normal. El segundo conjunto enciende los colores llamativos. El tercer conjunto enciende el color subrayado. Y ese cuarto conjunto enciende el color de fondo. Ese último restablece la coloración a la normalidad. Entonces, ¡usemos estos!
print_before_the_prompt () { printf "\n $txtred%s: $bldgrn%s \n$txtrst" "$USER" "$PWD" }
Aquí, agregué $txtred
antes del primer %s
, y $bldgrn
antes del segundo %s
; luego, al final, restablecí el color del texto. Tienes que hacer esto porque una vez que establezcas un color, se mantendrá hasta que uses un nuevo color o restablezcas el color. También notarás que al configurar una variable, no le ponemos un signo de dólar como prefijo; pero usamos el signo de dólar cuando usamos la variable: así es como funcionan las variables del bash. Esto nos da lo siguiente:



Pasemos al paso final: agregar algunas secuencias de comandos para brindarnos aún más información.
Agregar información de control de versiones
Si has visto los screencasts que vienen con mi libro "Getting Good with Git", es posible que recuerdes que tengo información de control de versiones en mi prompt. Obtuve esta idea del excelente screencast de PeepCode "Advanced Command Line", que comparte esto, así como muchos otros excelentes consejos.
Para hacer esto, necesitaremos descargar y compilar la secuencia de comandos que encuentra esta información. Dirígete al repositorio de vcprompt, un script que genera la información de control de versiones. Si estás familiarizado con el sistema de control de versiones de Mercurial, puedes usarlo para obtener el repositorio, pero lo más probable es que desees presionar ese enlace "zip" para descargar el código de secuencia de comandos como un archivo zip. Una vez que lo descomprimas, tendrás que compilar el script. Para hacer esto, simplemente accede a la carpeta del script descomprimido mediante cd
y ejecuta el comando make
. Una vez que se ejecuta este comando, deberías ver un archivo llamado "vcprompt" en la carpeta. Este es el script ejecutable.
Entonces, ¿cómo usamos esto en nuestro prompt? Bueno, esto trae un rastro de conejo importante: ¿cómo “instalamos” un script (como este) para que podamos usarlo en la terminal? Todos los comandos que puedes ejecutar en el terminal se encuentran en una matriz definida de carpetas; esta matriz es la variable PATH. Puedes ver una lista de las carpetas que se encuentran actualmente en tu PATH 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 nuestra ruta. 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 lo que ya estaba en la variable PATH. Si ahora ponemos ese script vcprompt
en ~/bin, podremos ejecutarlo en cualquier carpeta de la terminal.
Entonces, ahora agreguemos esto a nuestro prompt:
print_before_the_prompt () { printf "\n $txtred%s: $bldgrn%s $txtpur%s\n$txtrst" "$USER" "$PWD" "$(vcprompt)" }
Agregué $txtpur %s
a la cadena "template" y agregué 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:



Ten 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. Puedes personalizar un poco esta salida, si lo deseas: consulta el archivo Readme que descargaste con el código fuente de la secuencia de comandos vcprompt
.
¡Sigue adelante!
Aquí está nuestro archivo .bashrc
o .bash_profile
completo:
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' # Black - Background 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 cómo personalizar el indicador de bash. Si tienes alguna pregunta, ¡asegúrate de dejarla en los comentarios!
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weekly