Bash (Español) - ArchWiki

Jump to content
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 adomAUR 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-gitAUR 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
- Wiki para Hackers de Bash
- Wiki para Hackers de Bash: Lista de tutoriales en línea de Bash
- Quote Tutorial

### Comunidad

- Un canal de IRC activo y amistoso para Bash

### Ejemplos

- Cómo cambiar el título de un xterm

Categories:

- Command-line shells (Español)
- GNU (Español)