Bash (Español)

Esta traducción de
Bash
fue revisada el
2021-02-15
. Si existen
cambios
puede
actualizarla
o avisar al
equipo de traducción
.
Artículos relacionados
Bash/Funciones
Bash/Personalización del indicador
Variables de entorno
Readline
Fortune
Pkgfile
Intérprete de línea de órdenes
Bash
(Bourne-again Shell) es un
intérprete de línea de órdenes
/lenguaje de programación por el
proyecto GNU
. Su nombre alude a su predecesor, el intérprete de línea de órdenes Bourne, que ha estado en desuso desde hace mucho tiempo. Bash se puede ejecutar en la mayoría de los sistemas operativos similares a UNIX, incluido GNU/Linux.
Bash es el intérprete de línea de órdenes predeterminado en Arch Linux.
Invocación
El comportamiento de Bash se puede alterar dependiendo de como se invoca. A continuación se describen distintos modos.
Si Bash es iniciado por
login
en un TTY, por un demonio
SSH
, o por algo similar, se considera un
intérprete de línea de órdenes de inicio de sesión
. Este modo también se puede activar mediante la opción de línea de órdenes
-l
/
--login
.
Bash se considera un
intérprete de línea de órdenes interactivo
cuando su entrada estándar y de error están conectadas a un terminal (por ejemplo, cuando se ejecuta en un emulador de terminal), y no se inicia con la opción
-c
o con
argumentos no opcionales
(por ejemplo,
bash
script
). Todos los intérpretes de línea de órdenes interactivos cargan
/etc/bash.bashrc
y
~/.bashrc
, mientras que los intérpretes de línea de órdenes interactivos de
inicio de sesion
también cargan
/etc/profile
y { {ic|~/.bash_profile}}.
Nota
En Arch
/bin/sh
(que solía ser el ejecutable del interprete de línea de órdenes Bourne) es un enlace simbólico a
/bin/bash
. Si Bash se invoca con el nombre
sh
, intenta imitar el comportamiento de inicio de las versiones históricas de
sh
, incluida la compatibilidad con POSIX.
Archivos de configuración
Bash intentará ejecutar un conjunto de archivos de inicio dependiendo de cómo se invocó. Véase la sección
Archivos de inicio de Bash
del manual de GNU Bash para obtener una descripción completa.
Archivo
Descripción
Intérprete de inicio de sesión
(véase notas)
Intérprete interactivo
sin inicio de sesión
/etc/profile
Carga
las configuraciones de la aplicación en
/etc/profile.d/*.sh
y
/etc/bash.bashrc
.
Sí
No
~/.bash_profile
Por usuario, después de
/etc/profile
. Si este archivo no existe,
~/.bash_login
y
~/.profile
son comprobados en ese orden. El archivo de estructura
/etc/skel/.bash_profile
también carga
~/.bashrc
.
Sí
No
~/.bash_logout
Por usuario, después de salir de un intérprete de línea de órdenes de inicio de sesión.
Sí
No
/etc/bash.bash_logout
Depende de la opción de compilación
-DSYS_BASH_LOGOUT="/etc/bash.bash_logout"
. Después de salir de un intérprete de línea de órdenes de inicio de sesión.
Sí
No
/etc/bash.bashrc
Depende de la opción de compilación
-DSYS_BASHRC="/etc/bash.bashrc"
. Carga
/usr/share/bash-completion/bash_completion
.
No
Sí
~/.bashrc
Por usuario, después de
/etc/bash.bashrc
.
No
Sí
Nota
Los intérpretes de línea de órdenes de inicio de sesión pueden ser no interactivos cuando se llaman con el argumento
--login
.
Mientras que los intérpretes de línea de órdenes interactivos que
no son de inicio de sesión
no
cargan
~/.bash_profile
, aún heredan el entorno de su proceso principal (que puede ser un intérprete de línea de órdenes de inicio de sesión). Véase
sobre procesos, entornos y herencia
para obtener más información.
Variables del intérprete de línea de órdenes y de entorno
El comportamiento de Bash y los programas ejecutados por él puede verse influido por una serie de variables de entorno. Las
variables de entorno
se utilizan para almacenar valores útiles, como los directorios de búsqueda de órdenes, o qué navegador utilizar. Cuando se inicia un nuevo intérprete de línea de órdenes o un script, hereda las variables de su padre (el proceso que lo lanza), por lo que comienza con un conjunto interno de variables del intérprete de línea de órdenes
[1]
.
Estas variables del intérprete de línea de órdenes en Bash se pueden exportar para convertirse en variables de entorno:
VARIABLE=contenido
export VARIABLE
o con un atajo
export VARIABLE=contenido
Las variables de entorno se colocan convencionalmente en
~/.profile
o
/etc/profile
para que otras intérpretes de línea de órdenes compatibles con Bourne puedan utilizarlas.
Véase
Variables de entorno
para más información en general.
Línea de órdenes
La línea de órdenes Bash es administrada por la biblioteca separada llamada
Readline
. Readline proporciona los estilos de accesos directos de
emacs
y
vi
para interactuar con la línea de órdenes, es decir, moverse hacia adelante y atrás en la base de palabras, eliminar palabras, etc. También es responsabilidad de Readline el administrar
historial
de órdenes de entrada. Por último, pero no menos importante, le permite crear
macros
.
Completar con tabulador
Completar con tabulador
es la opción para completar automáticamente las órdenes escritas presionando
Tabulador
(habilitada de manera predeterminada).
Nota
(del traductor):
Tabulador
también es conocido como
Tab
.
Pulsación única del tabulador
Puede requerirse hasta tres pulsaciones de tabulador para mostrar todas las terminaciones posibles para una orden. Para reducir el número necesario de pulsaciones de tabulador, véase
Readline (Español)#Completado más rápido
.
Órdenes comunes y opciones
De forma predeterminada, Bash solo completa con tabulador órdenes, nombres de archivo y variables. El paquete
bash-completion
lo extiende añadiendo opciones de completado más especializadas para las órdenes comunes y sus opciones, que se pueden habilitar mediante la obtención de
/usr/share/bash-completion/bash_completion
(que ya se obtuvo en
/etc/bash.bashrc
de Arch). Con
bash-completion
, las opciones de completado normales (tales como
$ ls file.*<tab><tab>
) se comportarán de manera distinta; sin embargo, se pueden volver a habilitar con
$ compopt -o bashdefault
programa
(véase
[2]
y
[3]
para más detalles).
Personalizar por órdenes
Nota
El uso de la orden incorporada
complete
puede causar conflictos con
bash-completion
.
De forma predeterminada, Bash solo completa los nombres de archivo que siguen a una orden. Puede cambiarlo para completar los nombres de las órdenes utilizando
complete -c
:
~/.bashrc
complete -c man which
o completar los nombres de las órdenes y los nombres de archivos con
-cf
:
complete -cf sudo
Véase la página del manual de Bash para más opciones de completado.
Historial
Completado del historial
Puede enlazar las teclas de flecha arriba y abajo para buscar en el historial de Bash (véase:
Readline (Español)#Historial
y
Sintaxis del archivo Init de Readline
):
~/.bashrc
bind '"\e[A": history-search-backward'
 bind '"\e[B": history-search-forward'
o que afecte a todos los programas de readline:
~/.inputrc
"\e[A": history-search-backward
"\e[B": history-search-forward
Historial más corto
La variable
HISTCONTROL
puede evitar que ciertas órdenes se registren en el historial. Por ejemplo, para detener el registro de órdenes idénticas y repetidas
~/.bashrc
export HISTCONTROL=ignoredups
o configúrelo en
erasedups
para asegurarse de que el historial de Bash solo contenga una copia de cada orden (independientemente de su ordenación). Véase la página del manual de Bash para más opciones.
Desactivar historial
Para desactivar el historial de bash solo temporalmente:
$ set +o history
Las órdenes introducidas ​​ahora no se registrarán en
$HISTFILE
.
Por ejemplo, ahora puede convertir en hash contraseñas mediante
printf secret | sha256sum
, u oculta la utilización de GPG como
gpg -eaF secret-pubkey.asc
y su secreto no se escribirá en el disco.
Para activar el historial:
$ set -o history
Sugerencia
Si la variable
HISTCONTROL
contiene
ignorespace
, las órdenes que comiencen con un espacio no se guardarán en el archivo del historial. Véase
bash(1) § Shell Variables
para más detalles.
Para desactivar todo el historial de bash:
~/.bashrc or /etc/profile
export HISTSIZE=0
... y sólo para asegurarse, destruya su antiguo archivo de historial para siempre:
$ wipe -i -l2 -x4 -p4 "$HISTFILE"
 $ ln -sv /dev/null "$HISTFILE"
Imitación de la capacidad de ejecutar la ayuda como Zsh
Zsh
puede invocar el manual para la orden que precede al cursor presionando
Alt+h
.
Un comportamiento similar se obtiene en Bash utilizando este enlace
Readline
:
~/.bashrc
run-help() { help "$READLINE_LINE" 2>/dev/null || man "$READLINE_LINE"; }
bind -m vi-insert -x '"\eh": run-help'
bind -m emacs -x     '"\eh": run-help'
Esto asume que está utilizando el (predeterminado)
modo de edición
Emacs.
Alias
alias
es una orden que permite reemplazar una palabra con otra cadena. A menudo se usa para abreviar una orden del sistema o para añadir argumentos predeterminados a una orden que se utiliza regularmente.
Los alias personales se almacenan preferiblemente en
~/.bashrc
, y los alias de todo el sistema (que afectan a todos los usuarios) pertenecen a
/etc/bash.bashrc
. Véase
[4]
para obtener ejemplos de alias.
Para las funciones, véase
Bash/Funciones
.
Consejos y trucos
Personalización del indicador
Véase
Bach/Personalización del indicador
.
No se encontró la orden
pkgfile
incluye un
hook
de "No se encontró la orden" que buscará automáticamente en los repositorios oficiales, al ingresar una orden no reconocida.
Necesita
cargar
el
hook
para activarlo, por ejemplo:
~/.bashrc
source /usr/share/doc/pkgfile/command-not-found.bash
Luego, cuando intente ejecutar una orden que no esté disponible se mostrará la siguiente información:
$ abiword
abiword may be found in the following packages:
  extra/abiword 3.0.1-2	/usr/bin/abiword
Nota
Es posible que deba actualizarse la base de datos pkgfile antes de que esto funcione. Véase
pkgfile (Español)#Instalación
para más detalles.
Desactivar Control+z en el terminal
Puede desactivar la función
Control+z
(detiene/cierra su aplicación) envolviendo su orden de la siguiente forma:
#!/bin/bash
trap "" 20
adom
Ahora, cuando presione accidentalmente
Control+z
en
adom
AUR
en lugar de
Mayúsculas+z
no pasará nada porque se ignorará
Control+z
.
Borrar la pantalla después de cerrar la sesión
Para borrar la pantalla después de cerrar la sesión en un terminal virtual:
~/.bash_logout
clear
reset
Auto "cd" al introducir solo una ruta
Bash puede añadir automáticamente
cd
al introducir solo una ruta en el intérprete de línea de órdenes. Por ejemplo:
$ /etc
bash: /etc: Es un directorio
Pero después de añadir una línea al archivo
.bashrc
:
~/.bashrc
...
shopt -s autocd
...
Obtiene:
[user@host ~]$ /etc
cd /etc
[user@host etc]$
Autojump
autojump-git
AUR
permite navegar por el sistema de archivos buscando cadenas en una base de datos con las rutas más visitadas del usuario.
Después de la instalación,
/etc/profile.d/autojump.bash
debe ser
cargado
para comenzar a utilizar la aplicación.
Impedir la sobreescritura de archivos
Para la sesión actual, para no permitir que los archivos regulares existentes se sobrescriban mediante la redirección de la salida del intérprete de línea de órdenes:
$ set -o noclobber
Esto es idéntico a
set -C
.
Para hacer los cambios persistentes para su usuario:
~/.bashrc
...
set -o noclobber
Para sobrescribir manualmente un archivo mientras
noclobber
está establecido:
$ echo "output" >| file.txt
Solución de problemas
Ajuste de línea al redimensionar la ventana
Al redimensionar un
emulador de terminal
, Bash puede no recibir la señal de redimensionamiento. Esto hará que el texto escrito no se ajuste correctamente y se superponga en el indicador. La opción
checkwinsize
del intérprete de línea de órdenes comprueba el tamaño de la ventana después de cada orden y, si es necesario, actualiza los valores de
LÍNEAS
y
COLUMNAS
.
~/.bashrc
shopt -s checkwinsize
Intérprete de línea de órdenes sale incluso si ignoreeof está definido
Si ha configurado la opción
ignoreeof
y se encuentra que al presionar repetidamente
ctrl-d
hace que se cierre el intérprete de línea de órdenes, es porque esta opción solo permite 10 invocaciones consecutivas de esta combinación de teclas (o 10 caracteres EOF consecutivos, para ser precisos), antes de salir del intérprete de línea de órdenes.
Para permitir valores más altos, tiene que utilizar la variable IGNOREEOF.
Por ejemplo:
export IGNOREEOF=100
Véase también
Wikipedia:es:Bash
Manual de referencia de Bash
, o
/usr/share/doc/bash/bashref.html
Sintaxis del archivo Init de Readline
El intérprete de línea de órdenes Bourne-Again
- El capitulo tercero de
La arquitectura de las aplicaciones de código abierto
Shellcheck
- Compruebe los scripts de bash en busca de errores comunes (basado en
shellcheck
)
PS1 generator
- genera su indicador de bash en .bashrc/PS1 con una interfaz de arrastrar y soltar
Órdenes aún más útiles en .bashrc
Tutoriales
Wiki de Greg
GregsWiki:BashGuide
GregsWiki:BashFAQ
Quote Tutorial
Comunidad
Un canal de IRC activo y amistoso para Bash
Ejemplos
Cómo cambiar el título de un xterm