| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa |
| bash [2022/09/17 18:55] – [Bash] peron | bash [2026/04/21 16:05] (actual) – editor externo 127.0.0.1 |
|---|
| ====== Bash ====== | ====== Bash ====== |
| |
| **Bash**, o //Bourne Again Shell//, es un [[interpretes de comandos|intérprete de comandos]] desarrollado a finales de la década de 1980s para el [[gnu|proyecto GNU]] basado en el anterior intérprete [[bourne shell|Shell de Bourne]]. | **Bash**, o //Bourne Again Shell//, es un [[interpretes de comandos|intérprete de comandos]] desarrollado a finales de la década de 1980s por Brian Fox para el [[gnu|proyecto GNU]] basado en el anterior intérprete [[bourne shell|Shell de Bourne]] de los sistemas similares a [[Unix]]. |
| |
| Para una breve explicación de cómo se utiliza este intérprete, la mayoría--por no decir toda-- de la explicación en [[aprende_a_usar_la_terminal|"aprende a usar la terminal"]] cumple su función. Si quieres saber cómo cambiar el intérprete por defecto de tu usuario, revisa [[interpretes_de_comandos|"intérpretes de comandos"]]. En este artículo se verá un par de opciones del intérprete para la personalización que te parezca más óptima. | >Para una breve explicación acerca del uso de un intérprete de comandos, refiérete al tutorial [[aprende_a_usar_la_terminal|"aprende a usar la terminal"]]. |
| |
| | ====Atajos de Bash==== |
| | Muchos de las combinaciones de control de Bash son similares a las de otros intérpretes de comandos. |
| |
| ===== Alias ===== | ^ **Atajo** ^ **Resultado en Bash** ^ |
| | |**Ctrl+A** |Va al comienzo de la CLI | |
| | |**Ctrl+E** |Va al final de la CLI | |
| | |**Ctrl+L** |Borra la pantalla | |
| | |**Ctrl+R** |Llama al buscador de historial | |
| | |**Ctrl+S** |Pausa la terminal | |
| | |**Ctrl+Q** |Des-pausa la terminal | |
| | |**Ctrl+D** |Sale del intérprete/interrumpe la comunicación | |
| |
| Una de las opciones más útiles que se pueden añadir al archivo ''.bashrc'' son los ''alias''. Es una forma de decirle al intérprete que cuando escribamos y enviemos una palabra (no necesariamente un comando), se ejecute un comando que hayamos especificado. Esto sirve mucho cuando hay comandos complejos que queremos usar varias veces y, en vez de escribirlo entero, usamos una abreviación. | ==== Opciones de shell ==== |
| |
| Si yo quiero crear un alias para el comando ''echo ¡Los aliases son lo más!'' a la palabra ''aliases'', basta con añadir la siguiente línea a tu archivo ''.bashrc'': | Bash es uno de los [[intérpretes de comandos]] más utilizados, y cuenta con muchas funcionalidades. Las más útiles son: |
| | |
| <code>alias aliases="echo ¡Los aliases son lo más!"</code> | |
| | |
| Tenga en cuenta que usé la palabra ''aliases'' y no ''alias'', porque esta última ya está en uso para los comandos de bash. Asegúrate siempre de que los alias que uses no entren en conflicto con otros programas del mismo nombre. Para asegurarte, puedes usar el comando | |
| | |
| <code>which comando</code> | |
| | |
| para que te regrese todos los archivos ejecutables con ese nombre. Si el comando no te devuelve ningún archivo, puedes usar esa palabra sin problemas. | |
| | |
| Si el alias contiene caracteres que no sean números o letras (los espacios no están permitidos), hay que encerrar el nombre del alias con comillas: | |
| | |
| <code>alias "mi-alias"="ls -lA;cat *.txt|grep texto"</code> | |
| o | |
| <code>alias "mi-alias=ls -lA;cat *.txt|grep texto"</code> | |
| | |
| El último alias contiene varios caracteres que representan funciones especiales del intérprete, como el '';'' que separa una orden de la otra, y ejecuta la siguiente cuando la anterior terminó, y el ''|'', que envía el texto recibido a ''stdout'' y lo reenvía al siguiente comando por ''stdin''. Aun así, el alias es perfectamente válido, porque podemos usar alias para cualquier comando complejo que podamos escribir manualmente en bash. | |
| | |
| | |
| ===== Opciones de shell ===== | |
| |
| === Autocompletado === | === Autocompletado === |
| Una opción generalmente activa en Bash es la **función de autocompletado**, que se activa presionando la **tecla Tab**. Simplemente escribe el inicio del nombre de un archivo, directorio y comando y presiona Tab y el intérprete intentará deducir el resto. | |
| | Una opción generalmente activa en Bash es la **función de autocompletado**, que se activa presionando la **tecla Tab**. Simplemente escribe el inicio del nombre de un archivo, directorio y comando y presiona Tab, y el intérprete intentará deducir el resto. |
| |
| === Historial === | === Historial === |
| | |
| Este intérprete almacena los comandos ingresados en la sesión, en lo que se denomina "historial". Puedes acceder a este historial de comandos previamente utilizados por medio de las **flecha de cursor arriba** y **flecha de cursor abajo** para retroceder o avanzar en el historial. | Este intérprete almacena los comandos ingresados en la sesión, en lo que se denomina "historial". Puedes acceder a este historial de comandos previamente utilizados por medio de las **flecha de cursor arriba** y **flecha de cursor abajo** para retroceder o avanzar en el historial. |
| |
| ==== Archivos de configuración ==== | ==== Archivos de configuración ==== |
| |
| Las opciones de bash se guardan en el archivo ''.[[bashrc]]'' en tu directorio ''/home/usuario''. Si tu usuario, digamos, es ''fulana'', este archivo tiene la ruta completa de ''/home/fulana/.bashrc'', o en forma abreviada, ''~/.bashrc''. Nótese que este archivo, y los demás, comienzan con un punto para permanecer "ocultos" frente a varios comandos para no estorbar mucho el directorio. | Las opciones de bash se guardan en tu fichero ''~/.[[bashrc]]''. Si lo deseas también puedes configurar el archivo ''~/.[[bash_logout]]'', que sólo se ejecuta tras desloguearte de tu sesión de texto-plano.xyz. |
| |
| Existe otro archivo, y podemos llamarlo en castellano //perfil de arranque//. Es un archivo que se lee y ejecuta cuando se invoca Bash al iniciar sesión, es decir, no se ejecuta cuando, ya dentro de texto-plano, ejecutamos una o más instancias nuevas de Vash con [[tmux]]. Este archivo puede tener varios nombres, siendo el perfil de arranque del sistema ''/etc/profile'', y para cada usuario, ''~/.bash_profile'', ''~/.bash_login'' o ''~/.profile''. Si existe más de uno de estos archivos, cuando se corre bash en //modo interactivo// (que es como lo corremos normalmente), éste ejecuta el primer archivo que encuentra en este orden. Hasta el momento, texto-plano no tiene un archivo ''/etc/profile'', y se recomienda usar simplemente ''~/.bash_profile''. | >Este archivo, y los demás, comienzan con un punto para permanecer "ocultos" frente a varios comandos para no estorbar mucho el directorio. |
| |
| **//PROTIP: Si no estás seguro de que quieres una opción guardada por defecto, en vez de agregarla a ''.bashrc'', ¡simplemente ejecútalas y revisa qué cambios ocurrieron!//** | Puede existir también otro fichero de configuración denominado //perfil de arranque//, que se lee y ejecuta al invocar Bash al iniciar sesión (es decir, no se ejecuta cuando ejecutas bash de forma anidada dentro de texto plano o utilizas [[tmux]]). Cada usuario podría tener un ''~/.bash_profile'', que se ejecutará al iniciar texto-plano con tal shell. |
| | |
| | |
| | |
| | ==== Opciones Avanzadas de Bash ==== |
| |
| |
| ===== Opciones Avanzadas de Bash ===== | |
| |
| ==== Variables de entorno ==== | ==== Variables de entorno ==== |
| <code>export variable=valor</code> | <code>export variable=valor</code> |
| |
| ==== Prompt ==== | === Prompt === |
| Una variable muy modificada para cada usuario es ''PS1''. Esta variable define el texto que imprime la terminal cuando nos pide un comando. | Una variable muy modificada para cada usuario es ''PS1''. Esta variable define el texto que imprime la terminal cuando nos pide un comando. |
| |
| siendo ''\t'' la hora, en el huso horario del servidor, en formato de 24 horas (''\T'' para 12 horas). El último espacio dentro de la definición va a ser mostrado como tal. | siendo ''\t'' la hora, en el huso horario del servidor, en formato de 24 horas (''\T'' para 12 horas). El último espacio dentro de la definición va a ser mostrado como tal. |
| |
| === Opciones específicas de Bash === | === Alias === |
| |
| Hay opciones específicas de Bash que resultan útiles para algunas personas. Se modifican con los comandos ''shopt'' y ''set''. | Una opción útil que puedes añadir a tu archivo ''.bashrc'' son los //alias//. Estos te permiten especificar - por ejemplo - un equivalente abreviado de una orden. |
| | |
| | Si deseas crear un alias para el comando ''echo ¡Los aliases son lo más!'' a la palabra ''aliases'', basta con añadir la siguiente línea a tu archivo ''.bashrc'': |
| | |
| | <code>alias aliases="echo ¡Los aliases son lo más!"</code> |
| | |
| | Ten en cuenta el uso de la palabra ''aliases'' y no ''alias'' (pues esta última está reservada para los comandos de bash). Asegúrate siempre de que los alias que uses no entren en conflicto con otros programas del mismo nombre. Para asegurarte, puedes usar el comando |
| | |
| | <code>which comando</code> |
| | |
| | para que te regrese todos los archivos ejecutables con ese nombre. Si el comando no te devuelve ningún archivo, puedes usar esa palabra sin problemas. |
| | |
| | Si el alias contiene caracteres que no sean números o letras (los espacios no están permitidos), hay que encerrar el nombre del alias con comillas: |
| | |
| | <code>alias "mi-alias"="ls -lA;cat *.txt|grep texto"</code> |
| | o |
| | <code>alias "mi-alias=ls -lA;cat *.txt|grep texto"</code> |
| | |
| | El último alias contiene varios caracteres que representan funciones especiales del intérprete, como el '';'' que separa una orden de la otra, y ejecuta la siguiente cuando la anterior terminó, y el ''|'', que envía el texto recibido a ''stdout'' y lo reenvía al siguiente comando por ''stdin''. Aun así, el alias es perfectamente válido, porque podemos usar alias para cualquier comando complejo que podamos escribir manualmente en bash. |
| | |
| | También puedes agregar tus //alias// en un el fichero ''~/.config/[[bash_aliases]]'', los cuales serán instaurados al ejecutar bash en modo interactivo. |
| | |
| | ==== Opciones específicas de Bash ==== |
| | |
| | Hay opciones específicas de Bash que resultan útiles para algunas personas. Se modifican con los comandos ''[[shopt]]'' y ''set''. |
| |
| Ingresar el comando ''shopt'' sin ningún argumento devuelve [[shopt|todas las opciones actuales]]. Si queremos activar alguna, se añade ''shopt -s opción'' a ''.bashrc'', y para desactivarla, ''shopt -u opción''. Para una descripción de todas las opciones (en inglés), se puede consultar [[https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html#The-Shopt-Builtin|este nodo del manual de Bash]]. | Ingresar el comando ''shopt'' sin ningún argumento devuelve [[shopt|todas las opciones actuales]]. Si queremos activar alguna, se añade ''shopt -s opción'' a ''.bashrc'', y para desactivarla, ''shopt -u opción''. Para una descripción de todas las opciones (en inglés), se puede consultar [[https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html#The-Shopt-Builtin|este nodo del manual de Bash]]. |
| Para ver todas las opciones de bash que están activadas (no mostrar todas las opciones, como hace ''shopt''), se puede leer la variable ''BASHOPTS'' con el comando ''echo $BASHOPTS'', y mostrará las opciones activadas separadas por dos puntos. | Para ver todas las opciones de bash que están activadas (no mostrar todas las opciones, como hace ''shopt''), se puede leer la variable ''BASHOPTS'' con el comando ''echo $BASHOPTS'', y mostrará las opciones activadas separadas por dos puntos. |
| |
| | |
| | > Si no estás seguro de que quieres una opción guardada por defecto, en vez de agregarla a ''.bashrc'', ¡simplemente ejecútalas y revisa qué cambios ocurrieron! |
| ==== Más información ==== | ==== Más información ==== |
| |
| * Manual de referencia de GNU Bash, en inglés, [[https://www.gnu.org/software/bash/manual/html_node/index.html|separado por nodos]], o [[https://www.gnu.org/software/bash/manual/bash.html|en una página entera]]. | __**Ver también**__: [[Tutorial de programación en Bash]] |
| | |
| | Manual de referencia de GNU Bash, (en inglés): |
| | * [[https://www.gnu.org/software/bash/manual/html_node/index.html|separado por nodos]] |
| | * [[https://www.gnu.org/software/bash/manual/bash.html|En una página web entera]]. |