Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
La última versión original (en inglés) del Manual de Referencia de Bash se puede encontrar en el
sitio oficial del programa GNU Bash: http://www.gnu.org/software/bash/bash.html
Se autoriza a copiar, distribuir y/o modificar este documento bajo los términos de la GNU Free
Documentation License, Versión 1.3 o cualquier versión posterior publicada por la Free Software
Foundation; sin Secciones Invariantes, sin los textos de Portada y sin los textos de Contraportada. Se
incluye una copia de la licencia en la sección titulada “GNU Free Documentation License” en el
Apéndice C, seguida por una traducción de la misma (Apéndice D) obtenida de:
http://docs.danexlandia.com.mx/gfdl/gfdl_es.f.html
Página ii
Datos de la Edición original:
Página iii
Presentacion de la version original
This text is a brief description of the features that are present in the Bash shell (version 4.1, 23
December 2009).
This is Edition 4.1, last updated 23 December 2009, of The GNU Bash Reference Manual, for
Bash, Version 4.1.
Copyright © 1988–2009 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this manual provided the
copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy, distribute and/or modify this document under the terms of the
GNU Free Documentation License, Version 1.3 or any later version published by the Free Software
Foundation; with no Invariant Sections, with the Front-Cover texts being “A GNU Manual”, and with
the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled “GNU
Free Documentation License”.
(a) The FSF’s Back-Cover Text is: You are free to copy and modify this GNU manual. Buying
copies from GNU Press supports the FSF in developing GNU and promoting software freedom.”
Published by the Free Software Foundation
59 Temple Place, Suite 330,
Boston, MA 02111-1307
USA
Página iv
Índice de Contenido
Índice de contenido
1.-Introducción......................................................................................................................................9
1.1.-¿Qué es Bash?...........................................................................................................................9
1.2.-¿Qué es una shell?.....................................................................................................................9
2.-Definiciones....................................................................................................................................11
3.-Características Básicas de la Shell...................................................................................................13
3.1.-Sintaxis de la shell...................................................................................................................13
3.1.1.-Modo de operación de la shell.........................................................................................13
3.1.2.-Entrecomillado................................................................................................................14
3.1.2.1.-Carácter de Escape..................................................................................................14
3.1.2.2.-Comillas simples......................................................................................................14
3.1.2.3.-Comillas Dobles.......................................................................................................14
3.1.2.4.-Entrecomillado ANSI-C..........................................................................................14
3.1.2.5.-Traducciones Específicas de la Localización............................................................15
3.1.3.-Comentarios....................................................................................................................15
3.2.-Comandos de Shell..................................................................................................................16
3.2.1.-Comandos simples...........................................................................................................16
3.2.2.-Tuberías...........................................................................................................................16
3.2.3.-Listas de Comandos.........................................................................................................17
3.2.4.-Comandos Compuestos...................................................................................................17
3.2.4.1.-Construcciones Cíclicas...........................................................................................18
3.2.4.2.-Construcciones Condicionales..................................................................................18
3.2.4.3.-Agrupando Comandos.............................................................................................21
3.2.5.-Coprocesos......................................................................................................................22
3.3.-Funciones de Shell...................................................................................................................23
3.4.-Parámetros de Shell.................................................................................................................24
3.4.1.-Parámetros posicionales...................................................................................................25
3.4.2.-Parámetros Especiales.....................................................................................................25
3.5.-Expansiones de la shell............................................................................................................26
3.5.1.-Expansión de Llaves........................................................................................................27
3.5.2.-Expansión de Tildes.........................................................................................................27
3.5.3.-Expansión de Parámetros de Shell...................................................................................28
3.5.4.-Sustitución de Comandos................................................................................................31
3.5.5.-Expansión Aritmética......................................................................................................32
3.5.6.-Sustitución de Procesos...................................................................................................32
3.5.7.-Separación de palabras....................................................................................................33
3.5.8.-Expansión de Nombres de Fichero..................................................................................33
3.5.8.1.-Concordancia de Patrones........................................................................................34
3.5.9.-Eliminación del entrecomillado.......................................................................................35
3.6.-Redirecciones..........................................................................................................................35
3.6.1.-Redireccionando la entrada.............................................................................................36
3.6.2.-Redireccionando la salida................................................................................................36
3.6.3.-Anexando la salida redirigida...........................................................................................37
3.6.4.-Redirigiendo la Salida Estándar y la Salida de Error Estándar.........................................37
3.6.5.-Anexando la Salida Estándar y la Salida de Error Estándar.............................................37
Página v
Índice de Contenido
Página vi
Índice de Contenido
Página vii
Índice de Contenido
C.5.-COMBINING DOCUMENTS.............................................................................................161
C.6.-COLLECTIONS OF DOCUMENTS..................................................................................161
C.7.-AGGREGATION WITH INDEPENDENT WORKS.........................................................161
C.8.-TRANSLATION..................................................................................................................162
D.0.1.-TERMINATION...............................................................................................................162
C.9.-FUTURE REVISIONS OF THIS LICENSE.......................................................................162
C.10.-RELICENSING.................................................................................................................163
C.11.-ADDENDUM: How to use this License for your documents.............................................163
Apéndice D: Licencia de Documentación Libre de GNU (Traducción)...........................................164
D.0.-PREÁMBULO.....................................................................................................................164
D.1.-APLICABILIDAD Y DEFINICIONES..............................................................................164
D.2.-COPIA LITERAL................................................................................................................166
D.3.-COPIADO EN CANTIDAD...............................................................................................166
D.4.-MODIFICACIONES...........................................................................................................167
D.5.-COMBINACIÓN DE DOCUMENTOS..............................................................................168
D.6.-COLECCIONES DE DOCUMENTOS...............................................................................169
D.7.-AGREGACIÓN CON TRABAJOS INDEPENDIENTES..................................................169
D.8.-TRADUCCIÓN...................................................................................................................169
D.9.-TERMINACIÓN.................................................................................................................169
D.9.1.-REVISIONES FUTURAS DE ESTA LICENCIA............................................................170
D.10.-RE-LICENCIAMIENTO...................................................................................................170
D.11.-ADDENDUM: Cómo usar esta Licencia en sus documentos.............................................171
D.12.-Notas:.................................................................................................................................171
D.13.-Referencias:........................................................................................................................171
Apéndice E: Índices.........................................................................................................................172
E.1.-Índice de Comandos Internos de la Shell.............................................................................172
E.2.-Índice de Palabras Reservadas de la Shell............................................................................173
E.3.-Índice de Parámetros y Variables.........................................................................................173
E.4.-Índice de Funciones.............................................................................................................175
Página viii
Capítulo 1: Introducción
1.- Introducción
Página 9
Capítulo 1: Introducción
Página 10
Capítulo 2: Definiciones
2.- Definiciones
Estas definiciones son usadas a lo largo de este manual
POSIX
Una familia de estándares libres basados en Unix. Bash se ve afectado principalmente por
la parte Shell y Utilidades del estándar POSIX 1003.1.
blanco (blank)
Un carácter espacio o tabulador
comando interno o builtin
Un comando que es implementado internamente por la shell, en vez de por un programa
ejecutable en algún lugar del sistema de ficheros.
operadores de control
Un token que realiza una función de control. Es una nueva linea o alguno de los siguientes:
‘||’, ‘&&’, ‘&’, ‘;’, ‘;;’, ‘|’, ‘|&’, ‘(’, o ‘)’.
estado de salida
El valor retornado por un comando a su llamador. Este valor está restringido a ocho bits,
así que el valor máximo es 255.
campo
Una unidad de texto que es el resultado de una de las expansiones de la shell. Tras la
expansión, cuando se ejecuta un comando, los campos resultantes se utilizan como
nombre de comando y argumentos
nombre de archivo
Una cadena de caracteres usada para identificar un archivo.
tarea
Un juego de procesos que componen una tubería, y los procesos que descienden de estos,
que están todos en el mismo grupo de procesos.
control de tareas
Un mecanismo por el cual los usuarios pueden parar (suspender) y reiniciar (reanudar)
selectivamente la ejecución de procesos.
metacaracter
Un carácter que, cuando se encuentra sin entrecomillar, separa palabras. Un metacaracter
es un blanco o uno de los siguientes caracteres: ‘|’, ‘&’, ‘;’, ‘(’, ‘)’, ‘<’, o ‘>’.
nombre
Una palabra consistente únicamente en letras, números y caracteres de subrayado, y que
comienza con una letra o un carácter de subrayado. Los nombres se usan como nombres
de variables de shell y de funciones. También se le llama identificador.
operador
Un operador de control o un operador de redirección. Vea en la sección 3.6 [Redirec-
ciones], una lista de operadores de redirección. Los operadores contienen al menos un
metacaracter sin entrecomillar.
grupo de procesos
Una colección o procesos relacionados cada uno de los cuales tiene el mismo identificador
Página 11
Capítulo 2: Definiciones
de grupo de procesos.
identificador (o ID) de grupo de procesos
Un identificador único que representa un grupo de procesos durante su tiempo de vida.
palabra reservada
Una palabra que tiene un significado especial para la shell. La mayoría de las palabras
reservadas introducen en la shell construcciones de control de flujo, como for y while.
estado de retorno
Un sinónimo para el estado de salida.
señal
Un mecanismo por el que cualquier proceso puede ser notificado por el kernel de un
evento ocurrido en el sistema.
comandos internos especiales
Un comando interno de la shell que ha sido clasificado como especial por el estándar
POSIX
token (o componente léxico)
Una secuencia de caracteres considerados una unidad única por el shell. Puede ser bien
una palabra o un operador.
palabra
Una secuencia de caracteres tratados como una unidad por el shell. Las palabras no
pueden incluir metacaracteres sin entrecomillar.
Página 12
Capitulo 3: Características Básicas del Shell
Página 13
Capitulo 3: Características Básicas del Shell
Cada uno de los metacaracteres de shell (vea el Capítulo 2 [Definiciones]) tiene un significado
especial para el shell y debe ser entrecomillado si se representa a sí mismo. Cuando se está usando las
habilidades de expansión de la historia de comandos (vea la Sección 9.3 [Interacciones con la
Historia]), el carácter de expansión de la historia, normalmente '!', debe ser entrecomillado para
prevenir la expansión de la historia. Vea la Sección 9.1 [Características de Historial de Bash], para
más detalles concernientes a la expansión de la historia.
Hay tres mecanismos de entrecomillado: El carácter de escape, las comillas simples y las comillas
dobles.
3.1.2.1.- Carácter de Escape
El carácter de escape consiste en una barra invertida sin entrecomillar '\'. Esta mantiene el valor literal
del carácter que le sigue, con la excepción de la nueva línea. Si aparece una pareja \nueva_linea esta es
tratada como una continuación de línea (esto es, esta es eliminada del flujo de entrada e ignorada
completamente).
3.1.2.2.- Comillas simples
Encerrar caracteres en comillas simples (''') mantiene el valor literal de cualquier carácter situado
entre las comillas. Una comilla simple no puede aparecer encerrada entre comillas simples, incluso
cuando es precedida por una barra invertida.
3.1.2.3.- Comillas Dobles
Encerrar caracteres entre comillas dobles ('”') mantiene el valor literal de todos los caracteres dentro
de las comillas, con la excepción de '$', ''', '\' y, cuando la expansión de la historia está habilitada,
'!'. Los caracteres '$' y ''' mantienen su significado especial dentro de comillas dobles (Vea la Sección
3.5 [Expansiones de Shell]). La barra invertida mantiene su significado especial sólo cuando es seguida
por uno de los siguientes caracteres: '$', ''', '\', o nueva linea. Dentro de comillas dobles, las
barras invertidas que son seguidas por uno de estos caracteres son eliminadas. Las barras invertidas
que preceden caracteres sin un significado especial permanecen como tales. Una comilla doble puede
ser entrecomillada dentro de dobles comillas precediéndola con una barra invertida. Si está habilitada
la expansión de la historia de comandos esta se realizará a menos que el signo '!' que aparece entre las
comillas dobles sea escapado usando una barra invertida. La barra invertida precediendo al '!' no es
eliminada.
Los parámetros especiales '*' y '@' tienen un significado especial cuando aparecen encerrados
entre comillas dobles (vea la sección 3.5.3 [Expansión de parámetros de la Shell]).
3.1.2.4.- Entrecomillado ANSI-C
Las palabras de la forma $'cadena' son tratadas de forma especial. La palabra se expande a cadena,
con los caracteres escapados por barras invertidas reemplazados como se especifica por el estándar
ANSI C. Las secuencias de escape con barra invertida, si están presentes, son decodificadas como
sigue:
\a alerta(campana)
\b retroceso (elimina el carácter anterior)
\e
\E un carácter de escape (no ANSI C)
\f carácter de alimentación de línea (form feed)
Página 14
Capitulo 3: Características Básicas del Shell
Página 15
Capitulo 3: Características Básicas del Shell
secuencia de palabras separadas por blancos, terminada por uno de los operadores de control de la
shell (vea el Capítulo 2 [Definiciones]). La primera palabra generalmente especifica un comando para
ser ejecutado, con el resto de las palabras como argumentos del comando.
El estado de retorno (vea la Sección 3.7.5 [Estado de salida]) de un comando simple es su estado
de salida como viene especificado por la función POSIX 1003.1 waitpid, o 128+n si el comando fue
terminado por la señal n.
3.2.2.- Tuberías
Una tubería es una secuencia de comandos simples separados por uno de los operadores de control '|'
o '|&'.
El formato de uso de una tubería es:
[time [-p]] [!] comando1 [ [| o |&] comando2 … ]
La salida de cada comando en la tubería es conectado a través del cauce a la entrada del siguiente
comando. Esto es, cada comando lee la salida del comando previo. Esta conexión se establece antes de
realizar cualquier redirección especificada por el comando.
Si se usa '|&' la salida de error estándar del comando1 es conectada a la entrada estándar del
comando2 a través del cauce; es una forma corta para 2>&1. Esta redirección implícita de la salida de
error estándar se realiza después de cualquier redirección especificada en el comando.
La palabra reservada time produce que se impriman estadísticas de tiempo para la tubería una
vez que esta finaliza. Las estadísticas actualmente consisten en el tiempo transcurrido y tiempo de
usuario y de sistema consumidos por la ejecución del comando. La opción ' -p' cambia el formato de
salida por el especificado por POSIX. La variable TIMEFORMAT puede ser ajustada a una cadena de
formato que especifique como se debe mostrar la información de los tiempos. Vea la Sección 5.2
[Variables de Bash] para obtener una descripción de los formatos disponibles. El uso de time como
palabra reservada permite el cronometrado de los comandos internos de la shell, las funciones de shell
y las tuberías. Un comando externo time no podría hacer esto fácilmente.
Si la tubería no se ejecuta de forma asíncrona (vea la Sección 3.2.3 [Listas]) la shell espera hasta
que se completen todos los comandos de la tubería.
Cada comando en una tubería se ejecuta en su propia subshell (vea la Sección 3.7.3 [Entorno de
Ejecución de Comandos]). El estado de salida de una tubería es el estado de salida de el último
comando en la tubería, a menos que la opción pipefail esté activada (vea la Sección 4.3.1 [El
Comando Interno Set]) Si pipefail está activado, el estado de retorno de la tubería es el valor del
último comando (el más a la derecha) en salir con un estado distinto de cero, o cero si todos los
comandos salen satisfactoriamente. Si la palabra reservada '!' precede a la tubería, el estado de salida
es la negación lógica del estado de salida como se describió más arriba. El shell espera hasta que todos
los comandos en la tubería terminen antes de retornar un valor.
3.2.3.- Listas de Comandos
Una lista es una secuencia de una o más tuberías separadas por uno de los siguientes operadores: ';',
'&', '&&', o '||', y opcionalmente terminada por uno de los siguientes: ';', '&', o una nueva línea.
De estos operadores de lista '&&' y '||' tienen igual precedencia, seguidos por ';' y '&', que tienen
igual precedencia.
Una secuencia de una o más nuevas líneas pueden aparecer en una lista para delimitar
comandos, esto equivale a un punto y coma.
Si un comando termina con el operador de control '&' la shell ejecuta el comando de forma
asíncrona en una subshell. Esto es conocido como ejecutar el comando en segundo plano. La shell no
Página 16
Capitulo 3: Características Básicas del Shell
espera a que el comando finalice, y el estado de retorno es 0 (verdadero). Cuando el control de tareas
no está activado (vea el Capítulo 7 [Control de Tareas]), la entrada estándar para los comandos
asíncronos, en ausencia de alguna redirección explícita, es redirigida desde /dev/null.
Los comandos separados por un ';' se ejecutan secuencialmente; la shell espera para que cada
comando finalice turnándose con el siguiente. El estado de retorno es el estado de retorno del último
comando ejecutado.
Las listas Y (AND) y O (OR) son secuencias de una o más tuberías separadas por los operadores
de control '&&' y '||' respectivamente. Las listas AND y OR son ejecutadas con asociatividad a la
izquierda
Una lista AND tiene la forma
comando1 && comando2
comando2 se ejecuta sí y sólo sí el comando1 retorna un estado de salida de cero.
Una lista OR tiene la forma
comando1 || comando2
comando2 se ejecuta sí y sólo sí, el comando1 retorna un valor de salida distinto de cero.
El estado de retorno de las listas AND y OR es el estado de salida del último comando ejecutado
en la lista.
3.2.4.- Comandos Compuestos
Los comandos compuestos son las construcciones de programación de la shell. Cada construcción
comienza con una palabra reservada o un operador de control y termina con otra correspondiente
palabra reservada u operador. Cualquier redirección (vea la Sección 3.6 [Redirecciones]) asociada con
un comando compuesto se aplica a todos los comandos dentro de ese comando compuesto, a menos
que sea sobreescrito explícitamente.
Bash proporciona construcciones cíclicas, comandos condicionales y mecanismos para agrupar
comandos y ejecutarlos como una unidad.
3.2.4.1.- Construcciones Cíclicas
Bash soporta las siguientes construcciones cíclicas (en forma de bucle).
Note que en cualquier lugar en el que aparezca un ';' en la descripción de la sintaxis de un
comando este puede ser reemplazado por una o más nuevas líneas.
until
La sintaxis del comando until es:
until comandos-test; do comandos-consiguientes; done
Ejecuta los comandos-consiguientes mientras que los comandos-test tengan un estado de
salida distinto de cero. El estado de retorno es el estado de salida del último comando
ejecutado en comandos-consiguientes, o cero si no se ejecutó ninguno.
while
La sintaxis del comando while es:
while comandos-test; do comandos-consiguientes; done
Ejecuta los comandos-consiguientes mientas que los comandos-test tengan un estado de
salida igual a cero. El estado de retorno es el estado de salida del último comando
ejecutado en comandos-consiguientes, o cero si no se ejecutó ninguno.
for
La sintaxis del comando for es:
Página 17
Capitulo 3: Características Básicas del Shell
Página 18
Capitulo 3: Características Básicas del Shell
entrecomillado antes de intentar el ajuste. Cada patrón sufre expansión del tildes,
expansión de parámetros, sustitución de comandos y expansión aritmética.
Puede haber un número arbitrario de clausulas case, cada una terminada con un ';;',
';&' o ';;&'. El primer patrón que ajusta determina la lista-comandos que será ejecutada.
Aquí hay un ejemplo usando case en un guión que se puede utilizar para describir una
interesante característica de un animal:
echo -n "Introduzca el nombre de un animal: "
read ANIMAL
echo -n "El $ANIMAL tiene "
case $ANIMAL in
caballo | perro | gato) echo -n "cuatro";;
hombre | canguro ) echo -n "dos";;
*) echo -n "un número desconocido de";;
esac
echo " patas."
Si se utiliza el operador ';;' no se intenta ningún ajuste adicional tras el primer patrón
encontrado. Usar ';&' en vez de ';;' produce que la ejecución continúe con la
lista-comandos asociada con la siguiente clausula, si hay alguna. Usar ';;&' en vez de ';;'
produce que la shell pruebe a ajustar los patrones en la siguiente clausula, si hay alguna, y
ejecuta cualquier lista-comandos asociada a los ajustes conseguidos.
El estado de retorno es cero si no se ajusta a ningún patrón. De otro modo, el estado de
retorno es la salida del estado de la lista-comandos ejecutada.
select
La construcción select permite generar menús fácilmente. Esta tiene casi la misma
sintaxis que el comando for:
select nombre [ in palabras …]; do comandos; done
Se expande la lista de palabras que siguen a in, generando una lista de items. El juego de
palabras expandidas se imprime en el flujo de la salida de error estándar, cada una
precedida por un número. Si se omite la construcción ' in palabras' se imprimen los
parámetros posicionales, como si se hubiese especificado 'in “$@”'. A continuación se
muestra el prompt PS3 y se lee una línea desde la entrada estándar. Si la linea consiste en
un número correspondiente a una de las palabras mostradas, entonces el valor de nombre
es ajustado a esa palabra. Si la linea está vacía, las palabras y el prompt se muestran de
nuevo. Si se lee EOF (fin de fichero), el comando select finaliza. Cualquier otro valor
leído produce que nombre se establezca a null. La linea leída es salvada en la variable
REPLY .
Los comandos son ejecutados después de cada selección hasta que se ejecuta un comando
break, punto en el que el comando select finaliza.
A continuación tenemos un ejemplo que permite al usuario elegir un nombre de fichero
del directorio actual y mostrar el nombre y el índice del archivo seleccionado:
select fname in *;
do
echo usted seleccionó $fname \($REPLY\)
break;
done
(( … ))
(( expresión ))
La expresión aritmética se evalúa de acuerdo a las reglas descritas más abajo (vea la
sección 6.5 [Aritmética del Shell]). Si el valor de la expresión es distinta de cero, el estado
Página 19
Capitulo 3: Características Básicas del Shell
Página 20
Capitulo 3: Características Básicas del Shell
Página 21
Capitulo 3: Características Básicas del Shell
Este cauce es establecido antes de cualquier redirección especificada por el comando (vea la Sección
3.6 [Redirecciones]). El descriptor de fichero se puede utilizar como argumento para los comandos de
shell y las redirecciones usando expansiones de palabra estándar.
El identificador de proceso de la shell engendrada para ejecutar el coproceso está disponible en el
valor de la variable NAME_PID . Se puede utilizar el comando interno wait para esperar hasta que el
coproceso termine.
El valor devuelto por un coproceso es el estado de salida del comando.
Página 22
Capitulo 3: Características Básicas del Shell
Página 23
Capitulo 3: Características Básicas del Shell
nuevos valores al array comenzando por el inmediatamente mayor al máximo índice del array (para
arrays indexados), o añadido como pares llave-valor adicionales en un array asociativo. Cuando se
aplica sobre una variable de tipo cadena, el valor se expande y se agrega al valor de la variable.
3.4.1.- Parámetros posicionales
Un parámetro posicional es un parámetro denotado por uno o más dígitos, distintos al dígito 0. Los
parámetros posicionales se asignan desde los argumentos de la shell cuando esta es invocada, y pueden
ser reasignados usando el comando interno set. El parámetro posicional N puede ser referenciado
como ${N} , o como $N cuando N consiste en un único dígito. Los parámetros posicionales no pueden
ser asignados con sentencias de asignación. Se utilizan los comandos internos set y shift para
establecer y eliminar estos parámetros (vea el Capítulo 4 [Comandos Internos de la Shell]). Los
parámetros posicionales son reemplazados temporalmente cuando se ejecuta una función de shell (vea
la Sección 3.3 [Funciones de la Shell]).
Cuando se expande un parámetro posicional consistente en más de un único dígito, este debe ser
encerrado entre llaves.
3.4.2.- Parámetros Especiales
La shell trata a varios parámetros de forma especial. Estos parámetros únicamente pueden ser refe-
renciados; la asignación a ellos no está permitida.
* Se expande a los parámetros posicionales, comenzando por el uno. Cuando la expansión
ocurre entre dobles comillas se expande a una única palabra con el valor de cada uno de
los parámetros separados por el primer carácter de la variable especial IFS. Esto es, “$* ”
es equivalente a “$1c$2c... ”, donde c es el primer carácter del valor de la variable IFS . Si
la variable IFS no está establecida, los parámetros se separan con espacios. Si IFS es
nulo, los parámetros se unen sin utilizar ningún tipo de separador.
@ Se expande a los parámetros posicionales, empezando por el uno. Cuando la expansión
ocurre entre comillas dobles cada parámetro es expandido a una palabra separada del
resto. Esto es, “$@” es equivalente a “$1 ” “$2 ” ….Si la expansión con comillas dobles
ocurre dentro de una palabra, la expansión del primer parámetro se une con la parte
inicial de la palabra original, y la expansión del último parámetro se une con la última
parte de la palabra original. Cuando no hay parámetros posicionales “ $@” y $@ se
expanden a nada (es decir, son eliminados).
# Se expande al número de parámetros posicionales en el sistema decimal
? Se expande al estado de salida de la tubería ejecutada en primer plano más reciente-
mente.
- (Un guión). Se expande a las banderas de opción actuales como se especificó en la
invocación, mediante el comando interno set, o aquellas especificadas por la propia shell
(como la opción '-i').
$ Se expande al id de proceso de la shell. En una subshell dada por ( ), esta variable se
expande a la id del proceso de la shell padre, no de la subshell.
! Se expande al id del proceso del comando ejecutado en segundo plano más reciente-
mente (de forma asíncrona).
0 Se expande al nombre de la shell o del guión de shell. Este se establece en el inicio de la
Página 24
Capitulo 3: Características Básicas del Shell
shell. Si Bash es invocado con un archivo de comandos (vea la Sección 3.8 [Guiones de
Shell]), $0 se asigna al nombre de ese archivo. Si Bash se inicia con la opción ' -c' (vea la
Sección 6.1 [Invocando a Bash]), entonces $0 se asigna al primer argumento tras la
cadena a ser ejecutada, si hay alguna presente. De otro modo, se asigna al nombre de
archivo usado para invocar Bash, dado por el argumento cero.
_ (Un carácter de subrayado). Al inicio de la shell, contiene la ruta absoluta usada para
invocar la shell o el guión de shell que está siendo ejecutado tal cómo se pasó en el
entorno o en la lista de argumentos. Posteriormente, expande al último argumento del
comando previo, tras la expansión. También contiene la ruta completa usada para invocar
cada comando ejecutado y situado en el entorno que se ha exportado para ese comando.
Cuando comprobamos el correo, este parámetro mantiene el nombre del archivo de
correo.
Página 25
Capitulo 3: Características Básicas del Shell
Página 26
Capitulo 3: Características Básicas del Shell
Página 27
Capitulo 3: Características Básicas del Shell
${parámetro:-palabra}
Si el parámetro no está establecido o es nulo, se sustituye por la expansión de palabra. De
otro modo, se sustituye por el valor de parámetro.
${parámetro:=palabra}
Si el parámetro no está establecido o es nulo se asigna a parámetro la expansión de
palabra. Luego se sustituye por el valor de parámetro. Los parámetros posicionales y los
parámetros especiales no pueden ser asignados de este modo.
${parámetro:?palabra}
Si el parámetro es nulo o no está establecido, se escribe en la salida de error estándar la
expansión de palabra (o un mensaje a tal efecto si palabra no está presente) y la shell, si no
es interactiva, termina. De otro modo, se sustituye por el valor de parámetro.
${parámetro:+palabra}
Si el parámetro es nulo o no está establecido, no realiza ninguna sustitución, de otro modo
se sustituye por la expansión de palabra
${parámetro:desplazamiento}
${parámetro:desplazamiento:longitud}
Expande hasta longitud caracteres del parámetro comenzando por el carácter especificado
por desplazamiento. Si se omite longitud, expande a la subcadena de parámetro que
comienza en el carácter especificado por desplazamiento. longitud y desplazamiento son
expresiones aritméticas (vea la Sección 6.5 [Aritmética de la Shell]). Esto es conocido
como Expansión de Subcadenas.
longitud debe evaluarse a un número mayor o igual que cero. Si el desplazamiento se
evalúa como un número menor que cero, entonces el valor del desplazamiento se cuenta
desde el final del valor de parámetro. Si el parámetro es '@', el resultado es longitud
parámetros posicionales comenzando en desplazamiento. Si el parámetro es el nombre de
un array indexado seguido por '@' o '*', el resultado es de longitud miembros del array
comenzando con ${parámetro[desplazamiento]} . Un desplazamiento negativo se toma
como relativo al índice inmediatamente superior al mayor índice del array especificado. La
expansión de subcadenas aplicada a un array asociativo produce resultados no definidos.
${!prefijo*}
${!prefijo@}
Expande a nombres de variables cuyos nombres comiencen con prefijo, separados por el
primer carácter de la variable especial IFS . Cuando se usa '@' y la expansión aparece
encerrada entre dobles comillas, cada nombre de variable se expande a una palabra
separada del resto.
${!nombre[@]}
${!nombre[*]}
Si nombre es una variable de tipo array, expande a la lista de índices del array (claves)
asignada en nombre. Si nombre no es un array, expande a 0 si nombre está establecido y a
nulo en caso contrario. Cuando se usa '@' y la expansión aparece encerrada entre comillas
dobles, cada clave se expande en una palabra separada.
Página 28
Capitulo 3: Características Básicas del Shell
${#parámetro}
Se sustituye por la longitud en caracteres del valor expandido de parámetro. Si el
parámetro es '*' o '@', el valor sustituido es el número de parámetros posicionales. Si
parámetro es un nombre de array seguido de '* ' o '@', el valor sustituido es el número de
elementos del array.
${parámetro#palabra}
${parámetro##palabra}
La palabra se expande para producir un patrón al igual que en la expansión de nombres de
fichero (vea la Sección 3.5.8 [Expansión de Nombres de Fichero]). Si el patrón encaja con
el principio del valor expandido de parámetro, entonces el resultado de la expansión es el
valor expandido de parámetro en el que se elimina el ajuste más corto al patrón (en el caso
de usar '#') o el ajuste más largo al patrón (en el caso de '##'). Si el parámetro es '@' o '*'
la operación de eliminación del patrón se aplica a cada parámetro posicional
sucesivamente, y la expansión es la lista resultante. Si el parámetro es una variable de tipo
array indexada por '@' o '*' la operación de eliminación del patrón se aplica a cada
miembro del array en turnos, y la expansión es la lista resultante.
${parámetro%palabra}
${parámetro%%palabra}
La palabra es expandida para producir un patrón como en la expansión de nombres de
fichero. Si el patrón encaja en una porción final del valor expandido de parámetro,
entonces el resultado de la expansión es el valor de parámetro con el ajuste más corto que
concuerde con el patrón (en el caso de '%') o el ajuste más largo (en el caso de '%%')
eliminados. Si el parámetro es '@' o '*' la operación de eliminación del patrón se aplica a
cada parámetro posicional en turnos y la expansión es la lista resultante. Si el parámetro es
una variable de tipo array indexada por '@' o '*', la operación de eliminación del patrón se
aplica a cada miembro del array secuencialmente, y la expansión es la lista resultante.
${parámetro/patrón/cadena}
patrón se expande para producir un patrón como en la expansión de nombres de archivo.
parámetro se expande y el ajuste más largo al patrón de este valor es sustituido por
cadena. Si el patrón comienza con '/', todos los ajustes al patrón son reemplazados por
cadena. Normalmente sólo se reemplaza el primer ajuste. Si el patrón comienza con '#',
este debe encajar al principio del valor expandido de parámetro. Si el patrón comienza con
'%' este debe ajustar al final del valor expandido de parámetro. Si la cadena es nula los
ajustes al patrón serán eliminados y se puede omitir la '/' posterior al patrón. Si el
parámetro es '@ ' o '* ', la operación de sustitución se aplica a cada parámetro posicional
por turnos, y la expansión es la lista resultante. Si parámetro es una variable de tipo array
indexada con '@' o '*', la operación de sustitución se aplica a cada uno de los miembros
del array en turnos, y la expansión es la lista resultante.
Página 29
Capitulo 3: Características Básicas del Shell
${parámetro^patrón}
${parámetro^^patrón}
${parámetro,patrón}
${parámetro,,patrón}
Esta expansión modifica las mayúsculas-minúsculas en los caracteres alfabéticos de
parámetro. patrón se expande para producir un patrón como en la expansión de nombres
de fichero. El operador '^' convierte las letras minúsculas que encajen con el patrón a
letras mayúsculas; el operador ';' convierte las letras mayúsculas que ajusten con el patrón
a letras minúsculas. Las expansiones con '^^' y ',,' convierten cada carácter que encaje
en el valor expandido; Las expansiones con '^' y ',' encajan y convierten únicamente el
primer carácter en el valor expandido. Si se omite el patrón se considera que este es igual
a '?', con el que encaja cualquier carácter. Si el parámetro es '@' o '*' las modificaciones
de mayúsculas y minúsculas se aplican a cada carácter posicional en turnos y la expansión
es la lista resultante. Si parámetro es una variable de tipo array indexada con ' @' o '*', las
modificaciones se aplican a cada miembro del array en turnos, y la expansión es la lista
resultante.
Página 30
Capitulo 3: Características Básicas del Shell
Página 31
Capitulo 3: Características Básicas del Shell
Página 32
Capitulo 3: Características Básicas del Shell
* Concuerda con cualquier cadena, incluida la cadena nula. Cuando la opción de shell
globstar está activada, y se utiliza el '*' en un contexto de expansión de nombre de
ficheros, dos '*' adyacentes se usan como un único patrón que concuerda con todos los
archivos y cero o más directorios y subdirectorios. Si están seguidos por un '/', dos '*'
adyacentes concordarán sólo con directorios y subdirectorios.
? Concuerda con cualquier carácter individual.
[…] Concuerda con cualquiera de los caracteres encerrados. Un par de caracteres sepa-
rados por un guión '-' indican una expresión de rango; cualquier carácter que por
orden se sitúe entre esos dos caracteres, usando la secuencia de ordenación de la
localización actual y su juego de caracteres, incluyendo a ambos, concuerda con la
expresión. Si el primer carácter que sigue al '[' es un '!' o un '^'entonces concuerda
con cualquier carácter no encerrado entre los corchetes. Un '_' puede concordar
incluyéndolo como el primer o el último carácter en el conjunto de caracteres
incluido. Un ']' puede ser concordante incluyéndolo como el primer carácter en el
conjunto. El orden de ordenación de los caracteres en las expresiones de rango se
determina mediante la localización actual y el valor de la variable de shell
LC_COLLATE , si está establecida.
Por ejemplo en la localización por defecto, C, '[a-dx-z]' es equivalente a '[abcdxyz]'.
Muchas localizaciones ordenan los caracteres en orden de diccionario, y en estas
normalmente '[a-dx-z]' no es equivalente a '[abcdxyz]'; podría ser equivalente a, por
ejemplo, '[aBbCcDdxXyYz]'. Para obtener la interpretación tradicional de los rangos en
expresiones entre corchetes, se puede forzar a utilizar la localización de C
estableciendo la variable de entorno LC_COLLATE o LC_ALL al valor 'C'.
Dentro de '[' y ']' se pueden especificar clases de caracteres usando la sintaxis
[:clase:], donde clase es una de las siguientes clases definidas en el estándar POSIX:
alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
Una clase de caracteres concuerda con cualquier carácter que forme parte de esa
clase. La clase word concuerda con letras, dígitos y el carácter '_'.
Se puede especificar una clase de equivalencia encerrada entre '[' y ']' utilizando la
sintaxis [=c=], la cual concuerda con cualquier carácter con el mismo peso de clasi-
ficación (como se define por la localización actual) que el carácter c
Entre '[' y ']' la sintaxis [.símbolo.] concuerda con el símbolo de clasificación símbolo.
Si la opción de shell extglob está activada usando el comando interno shopt, se reconocerán
varios operadores de patrones extendidos. En la descripción siguiente, una lista-patrones es una lista de
uno o más patrones separados por un '|'. Se pueden formar patrones compuestos usando uno o más de
los siguientes sub-patrones:
?(lista-patrones)
Concuerda con cero o una ocurrencia de los patrones dados.
*(lista-patrones)
Concuerda con cero o más ocurrencias de los patrones dados
+(lista-patrones)
Concuerda con una o más ocurrencias de los patrones dados.
@(lista-patrones)
Concuerda con uno de los patrones dados.
Página 33
Capitulo 3: Características Básicas del Shell
!(lista-patrones)
Concuerda con cualquier cosa que no se ajuste a los patrones dados.
3.6.- Redirecciones
Antes de que un comando sea ejecutado, su entrada y su salida pueden ser redireccionadas usando una
notación especial interpretada por la shell. La redirección también se puede utilizar para abrir y cerrar
archivos por el entorno de ejecución actual de la shell. Los siguientes operadores de redirección
pueden preceder o aparecer en cualquier lugar en medio de un comando simple o pueden seguir a un
comando. Las redirecciones son procesadas en el orden en el que aparecen, de izquierda a derecha.
Cada redirección puede ser precedida por un número de descriptor de fichero o puede estar
precedida por una palabra de la forma {nombre_de_variable} . En este caso, para cada operador
redirección exceptuando >&- y <&-, la shell asignará un descriptor de fichero mayor de 10 y asignará
este a {nombre_de_variable} . Si >&- o <&- están precedidos de {nombre_de_variable} , el valor de
nombre_de_variable define el descriptor a cerrar.
En las descripciones siguientes, si se omite el número de descriptor de fichero, y el primer
carácter del operador de redirección es '<', la redirección hace referencia a la entrada estándar
(descriptor de archivo 0). Si el primer carácter del operador de redirección es '>', la redirección hace
referencia al la salida estándar (descriptor de archivo 1).
La palabra que sigue al operador de redirección en las descripciones siguientes, salvo que se
especifique lo contrario, está sujeta a expansión de llaves, expansión de tildes, expansión de pará-
metros, sustitución de comandos, expansión aritmética, eliminación de entrecomillado, expansión de
nombres de fichero, y separación de palabras. Si esta se expande a más de una palabra, Bash informa
de un error.
Advierta que el orden de las redirecciones es importante. Por ejemplo, el comando
ls > listadir 2>&1
direcciona tanto la salida estándar (descriptor de fichero 1) y la salida de error estándar (descriptor de
fichero 2) al archivo listadir, mientras que el comando
ls 2>1& > listadir
direcciona únicamente la salida estándar al archivo listadir, ya que el error estándar se hizo una copia
de la salida estándar antes de que la salida estándar fuera redireccionada a listadir.
Bash maneja varios nombres de fichero especialmente cuando se utilizan en redirecciones, como
se describe en la tabla siguiente:
/dev/fd/fd
Si fd es un entero válido, el descriptor de fichero fd es duplicado
/dev/stdin
Se duplica el descriptor de fichero 0
/dev/stdout
Se duplica el descriptor de fichero 1
/dev/stderr
Se duplica el descriptor de fichero 2
Página 34
Capitulo 3: Características Básicas del Shell
/dev/tcp/host/puerto
Si host es un nombre de anfitrión válido o una dirección de internet y puerto es un número
de puerto de tipo entero o un nombre de servicio, Bash intenta abrir una conexión TCP al
socket correspondiente.
/dev/udp/host/puerto
Si host es un nombre de anfitrión válido o una dirección de internet y puerto es un número
de puerto de tipo entero o un nombre de servicio, Bash intenta abrir una conexión UDP al
socket correspondiente.
Un error al abrir o crear un archivo provoca que la redirección falle.
Las redirecciones con descriptores de fichero mayores de 9 deben ser usadas con cuidado, ya que
pueden entrar en conflicto con los descriptores de archivo que la shell usa internamente.
3.6.1.- Redireccionando la entrada
La redirección de la entrada provoca que el archivo cuyo nombre resulta de la expansión de palabra
sea abierto para lectura en un descriptor de fichero n, o la entrada estándar (descriptor de fichero 0) si
no se especifica el valor de n.
El formato general para la redirección de la entrada es:
[n]<palabra
Página 35
Capitulo 3: Características Básicas del Shell
>palabra 2>&1
Página 36
Capitulo 3: Características Básicas del Shell
descriptor de fichero abierto para salida, se produce un error de redirección. Como caso especial, si se
omite n y palabra no se expande a uno o más dígitos, la salida estándar y el error estándar son
redireccionados como se describió anteriormente.
3.6.9.- Moviendo Descriptores de Fichero
El operador de redirección
[n]<&dígito-
mueve el descriptor de fichero dígito al descriptor de fichero n, o la entrada estándar (descriptor de
fichero 0) si no se especifica el valor de n. Dígito es cerrado después de haber sido duplicado a n.
De forma similar el operador de redirección
[n]>&dígito-
mueve el descriptor de fichero dígito al descriptor de fichero n, o la salida estándar (descriptor de
fichero 1) si no se especifica n.
3.6.10.- Abriendo descriptores de fichero para lectura y escritura
El operador de redirección
[n]<>palabra
causa que el archivo cuyo nombre es la expansión de palabra se abra tanto para lectura como para
escritura en el descriptor de fichero n, o en el descriptor de fichero 0 si no se especifica n. Si el archivo
no existe se crea.
Página 37
Capitulo 3: Características Básicas del Shell
comandos realizada. Si no hubo sustitución de comandos, el comando finaliza con un estado igual a
cero.
3.7.2.- Búsqueda y Ejecución de Comandos
Después de que un comando haya sido separado en palabras, si esto resulta en un comando único y
una lista de comandos opcional, se realizan las siguientes acciones:
1. Si el nombre del comando no contiene barras inclinadas, la shell intenta localizar el comando.
Si existe una función de shell con ese nombre se invoca a dicha función como se describe en la
Sección 3.3 [Funciones de Shell].
2. Si el nombre no encaja con ninguna función, la shell busca en la lista de comandos internos de
la shell. Si encuentra alguna concordancia se invoca a ese comando interno.
3. Si el nombre no es una función de shell ni un comando interno y no contiene barras inclinadas,
Bash busca en cada elemento de $PATH un directorio conteniendo un archivo ejecutable con
ese nombre. Bash usa una tabla hash para recordar la ruta completa de los archivos ejecutables
para evitar múltiples búsquedas en el PATH (vea la descripción de hash en la Sección 4.1
[Comandos Internos de la Shell]). Se realiza una búsqueda completa de los directorios
incluidos en el $PATH únicamente si el comando no se encuentra en la tabla hash. Si la
búsqueda es infructuosa, la shell busca una función de shell denominada
command_not_found_handle. Si esta función existe se le invoca con el comando original y los
argumentos originales del comando como sus argumentos, y el estado de salida de la función
se convierte en el estado de salida de la shell. Si esa función no está definida la shell imprime
un mensaje de error y devuelve un estado de salida igual a 127.
4. Si la búsqueda es exitosa o si el nombre del comando contiene una o más barras invertidas, la
shell ejecuta el nombre de programa en un entorno de ejecución separado. El argumento 0 se
asigna al nombre dado, y el resto de argumentos del comando se asignan a los argumentos que
se le suministran, si los hay.
5. Si esta ejecución falla debido a que el archivo no se encuentra en un formato ejecutable y el
archivo no es un directorio, se asume que es un guión de shell y la shell lo ejecuta como se
describe en la Sección 3.8 [Guiones de Shell].
6. Si el comando no fue iniciado de forma asíncrona, la shell espera a que el comando finalice y
recoge su estado de salida.
3.7.3.- Entorno de Ejecución de Comandos
La shell tiene un entorno de ejecución que consiste en lo siguiente:
• Los archivos abiertos heredados por la shell en la invocación con las modificaciones
suministradas por el comando interno exec.
• El directorio actual de trabajo como se estableció con cd, pushd o popd o se heredó de la
shell en su invocación.
• La máscara del modo de creación de ficheros como se estableció con umask o se heredó
desde el padre de la shell.
• Las trampas actuales establecidas mediante trap.
• Los parámetros de la shell que son establecidos mediante la asignación de variables, con set o
heredados en el entorno desde el padre de la shell.
• Las funciones de la shell definidas durante la ejecución o heredadas en el entorno desde el
padre de la shell.
• Las opciones activadas en la invocación (bien por defecto o con argumentos en la línea de
comandos) o mediante set.
Página 38
Capitulo 3: Características Básicas del Shell
• Las opciones activadas con shopt (vea la Sección 4.3.2 [El comando Interno Shopt])
• Los alias de shell definidos mediante alias (vea la Sección 6.6 [Alias])
• Varios Ids de proceso, incluidos los de las tareas en segundo plano (vea la Sección 3.2.3
[Listas]), el valor de $$ y el valor de $PPID .
Cuando un comando único distinto de un comando interno o una función de shell va a ser eje-
cutado, este se invoca en un entorno de ejecución separado que consisten en lo siguiente. A menos que
se advierta lo contrario, los valores son heredados de la shell.
• Los archivos abiertos de la shell, más cualquier modificación y adición al comando
especificada mediante redirecciones.
• El directorio de trabajo actual.
• La máscara de modo de creación de ficheros.
• Las variables de shell y las funciones marcadas para exportar, junto con variables exportadas
por el comando, pasadas en el entorno (vea la Sección 3.7.4 [Entorno])
• Las trampas capturadas por la shell son reiniciadas a los valores heredados desde el padre de la
shell y las trampas ignoradas por la shell son ignoradas.
Un comando invocado en este entorno separado no puede afectar al entorno de ejecución de la
shell.
La sustitución de comandos, los comandos agrupados con paréntesis y los comandos asíncronos
se invocan en un entorno de subshell que es un duplicado del entorno de la shell, excepto que las
trampas capturadas por la shell se reinician a los valores que la shell heredó de su padre en la
invocación. Los comandos internos que se invocan como parte de una tubería también se ejecutan en
un entorno de subshell. Los cambios hechos al entorno de la subshell no puede afectar a entorno de
ejecución de la shell.
Las subshells engendradas para ejecutar la sustitución de comandos heredan el valor de la opción
'-e' desde la shell padre. Cuando no se encuentra en modo POSIX, Bash limpia la opción ' -e' en
dichas subshells.
Si un comando es seguido por un '&' y el control de tareas no está activo, la entrada estándar por
defecto para el comando es el archivo vacío '/dev/null'. En caso contrario, el comando invocado
hereda los descriptores de fichero de la shell invocante con las modificaciones realizadas por las
redirecciones.
3.7.4.- Entorno
Cuando se invoca un programa se le proporciona un array de cadenas llamado el entorno. Esto es una
lista de pares nombre-valor, de la forma nombre=valor.
Bash proporciona varias maneras de manipular el entorno. En la invocación, la shell escanea su
propio entorno y crea un parámetro para cada nombre que encuentra, marcándolo automáticamente
para exportarlo a los procesos hijo. Los comandos ejecutados heredan el entorno. Los comandos
export y 'declare -x' permiten que los parámetros y funciones sean añadidos o eliminados del
entorno. Si se modifica el valor de un parámetro en el entorno, el nuevo valor se convierte en parte del
entorno, reemplazando al valor anterior. El entorno heredado por cualquier comando ejecutado
consiste en el entorno inicial de la shell, cuyos valores pueden ser modificados en la shell, menos los
pares eliminados mediante los comandos unset y 'export -n', más cualquier adición mediante los
comandos export y 'declare -x'.
Se puede incrementar temporalmente el entorno para un comando único o una función ante-
poniendole asignaciones de parámetros, como se describe en la Sección 3.4 [Parámetros de Shell].
Estas sentencias de asignación afectan únicamente al entorno visto por ese comando.
Página 39
Capitulo 3: Características Básicas del Shell
Si la opción '-k' está establecida (vea la Sección 4.3.1 [El Comando Interno Set]), entonces todas
las asignaciones de parámetros se emplazan en el entorno para el comando, no sólo las que preceden
al nombre del comando.
Cuando Bash invoca un comando externo, la variable ' $_ ' se asigna al nombre de ruta completo
del comando y se pasa a dicho comando en su entorno.
3.7.5.- Estados de Salida
El estado de salida de un comando ejecutado es el valor retornado por la llamada al sistema waitpd o
alguna función equivalente. Los estados de salida tienen valores entre 0 y 255, aunque, como se
explica más abajo, la shell puede usar de forma especial valores superiores a 125. Los estados de
salida de los comandos internos de la shell y los comandos compuestos están también limitados a este
rango. Bajo ciertas circunstancias, la shell puede usar valores especiales para indicar modos de fallo
específicos.
Para los propósitos de la shell un comando que finaliza con un estado de salida igual a cero ha
tenido éxito. Un estado de salida distinto de cero indica que se ha producido un fallo. Este esquema
aparentemente intuitivo se usa de forma que existe un modo bien definido para indicar el éxito y una
variedad de formas para indicar varios modos de fallo. Cuando un comando termina con una señal de
error fatal cuyo número es N, Bash usa el valor 128+N como estado de salida.
Si no se encuentra un comando, el proceso hijo creado para ejecutarlo devuelve un estado de 127.
Si se encuentra un comando pero este no es ejecutable, el estado de retorno es 126.
Si un comando falla debido a un error durante la expansión o la redirección el estado de salida es
mayor que cero.
El estado de salida es usado por los comandos condicionales de Bash (vea la Sección 3.2.4.2
[Construcciones Condicionales) y algunas de las construcciones de listas (vea la Sección 3.2.3
[Listas]).
Todos los comandos internos de Bash devuelven un estado igual a cero si se ejecutan con éxito y
un estado distinto de cero en caso de fallo, de forma que se pueden usar en las construcciones
condicionales y de listas. Todos los comandos internos devuelven un estado de salida igual a 2 para
indicar un uso incorrecto.
3.7.6.- Señales
Cuando Bash es interactivo, en ausencia de cualquier trampa, este ignora SIGTERM ( de forma que
'kill 0' no destruye a las shells interactivas), y SIGINT es capturada y manejada (de forma que el
comando interno wait es interrumpible). Cuando Bash recibe una SIGINT, este detiene cualquier
bucle en ejecución. En todos los casos Bash ignora SIGQUIT. Si el control de tareas está habilitado
(vea el Capítulo 7 [Control de Tareas] Bash ignora SIGTTIN, SIGTTOU y SIGTSTP.
Los comandos no internos iniciados por Bash tienen manejadores de señales establecidos a los
valores heredados por la shell desde su padre. Cuando el control de tareas no está activado, los
comandos asíncronos ignoran SIGINT y SIGQUIT en adición a esos manejadores heredados. Los
comandos se ejecutan como resultado de una sustitución de comandos ignoran las señales de control
de tareas SIGTTOU y SIGTSTP generadas por el teclado.
La shell finaliza por defecto tras recibir un SIGHUP. Antes de terminar, una shell interactiva
reenvía el SIGHUP a todas sus tareas, tanto suspendidas como en ejecución. Se envía SIGCONT a las
tareas suspendidas para asegurarse de que reciben la señal SIGHUP. Para prevenir que la shell envíe la
señal SIGHUP a una tarea en particular esta debería ser eliminada de la tabla de tareas con el comando
interno disown (vea la Sección 7.2 [Comandos Internos para el Control de Tareas] o marcada para
que no reciba SIGHUP usando 'disown -h'.
Página 40
Capitulo 3: Características Básicas del Shell
Si la opción de shell huponexit ha sido establecida con shopt (vea la Sección 4.3.2 [El
Comando Interno Shopt]) Bash envía un SIGHUP a todas las tareas cuando una shell de inicio de
sesión interactiva finaliza.
Si Bash está esperando a que un comando finalice y recibe una señal para la cual tiene establecida
una trampa, la trampa no se ejecutará hasta que el comando finalice. Cuando Bash está esperando a un
comando asíncrono mediante el comando interno wait, la recepción de una señal para la cual tiene
establecida una trampa provoca que el comando interno wait finalice inmediatamente con un estado
de salida mayor que 128, justo después de la ejecución de la trampa.
Página 41
Capítulo 4: Comandos Internos de la Shell
Página 42
Capítulo 4: Comandos Internos de la Shell
Página 43
Capítulo 4: Comandos Internos de la Shell
Página 44
Capítulo 4: Comandos Internos de la Shell
Página 45
Capítulo 4: Comandos Internos de la Shell
test
[
test expr o [ expr ]
Evalúa una expresión condicional expr. Cada operador y operando debe ser un argumento
separado. Las expresiones son composiciones de las expresiones primarias descritas más
abajo en la Sección 6.4 [Expresiones Condicionales de Bash]. test no acepta ninguna
opción y tampoco acepta un argumento '--' como señal del fin de las opciones; en caso de
darse el '--' será ignorado.
Cuando se usa la forma con [ el último argumento que se proporcione al comando debe
ser un ].
Las expresiones pueden combinarse usando los siguientes operadores, listados en orden de
precedencia decreciente. La evaluación depende del número de argumentos; véase más
abajo.
! expr
Devuelve verdadero (true) si expr es falso (false)
( expr )
Devuelve el valor de expr. Esto se puede utilizar para anular la precedencia
normal de los operadores.
expr1 -a expr2
Devuelve verdadero si tanto expr1 como expr2 son verdaderos.
expr1 -o expr2
Devuelve verdadero si expr1 o expr2 son verdaderos.
Los comandos internos test y [ evalúan expresiones condicionales usando un juego de
reglas basado en el número de argumentos.
0 argumentos
La expresión es falsa
1 argumento
La expresión es verdadera si y sólo si el argumento no es nulo.
2 argumentos
Si el primer argumento es '!', la expresión es verdadera si y sólo si el segundo
argumento es nulo. Si el primer argumento es alguno de los operadores
condicionales unarios (vea la Sección 6.4 [Expresiones Condicionales de
Bash]), la expresión es verdadera si el test unario es verdadero. Si el primer
argumento no es un operador unario válido, la expresión es falsa.
3 argumentos
Si el segundo argumento es uno de los operadores condicionales binarios (vea
la Sección 6.4 [Expresiones Condicionales de Bash]), el resultado de la
expresión es el resultado de el test binario usando el primer y el tercer argu-
mento como operandos. Los operadores '-a' y '-o' son considerados opera-
dores binarios cuando hay tres argumentos. Si el primer argumento es '!' el
valor es la negación de el resultado del test usando el segundo y el tercer
argumento. Si el primer argumento es exactamente '(' y el tercer argumento
es exactamente ')', el resultado es el test del segundo argumento. En caso
contrario la expresión es falsa.
Página 46
Capítulo 4: Comandos Internos de la Shell
4 argumentos
Si el primer argumento es '!' el resultado es la negación de la expresión de
tres argumentos compuesta del resto de argumentos. En caso contrario, la
expresión es analizada y evaluada de acuerdo con la precedencia usando las
reglas listadas anteriormente.
5 o más argumentos
La expresión es analizada y evaluada de acuerdo a la precedencia usando las
reglas listadas anteriormente.
times
times
Imprime el tiempo de usuario y de sistema usado por la shell y sus hijos. El estado de
retorno es cero.
trap
trap [-lp] [arg] [sigspec …]
Los comandos en arg son leidos y ejecutados cuando la shell recibe la señal sigspec. Si
arg está ausente (y hay un único sigspec) o es igual a '-', cada disposición de señal
especificada es reiniciada a los valores que tenía cuando la shell fue iniciada. Si arg es la
cadena nula, la señal especificada por cada sigspec es ignorada por la shell y los comandos
que esta invoca. Si arg no está presente y se ha suministrado la opción ' -p', la shell
muestra los comandos de la trampa asociada con cada sigspec. Si no se suministran
argumentos, o sólo se pasa la opción ' -p', trap imprime la lista de comandos asociados
con cada número de señal en un formato que puede ser reutilizado como entrada. La
opción '-l' causa que la shell imprima una lista de nombres de señal y sus
correspondientes números. Cada sigspec es o bien un nombre de señal o un número de
señal. Los nombres de señal son insensibles a mayúsculas y minúsculas y el prefijo SIG es
opcional.
Si un sigspec es 0 o EXIT, el argumento se ejecuta cuando la shell finaliza. Si un sigspec
es DEBUG, se ejecuta el comando arg antes de cada comando individual, para
command, comandos case, comandos select, todos los comandos for aritméticos, y
antes de que se ejecute el primer comando en una función de shell. Le remitimos a la
descripción de la opción extdebug para el comando interno shopt (vea la Sección 4.3.2
[El Comando Interno Shopt]) para obtener los detalles de su efecto en la trampa DEBUG.
Si un sigspec es RETURN el comando arg se ejecuta cada vez que una función de shell o
un guión de comandos ejecutado con los comandos internos . o source finalice su
ejecución.
Si un sigspec es ERR, el comando arg se ejecuta siempre que un comando individual
tenga un estado de salida distinto de cero, sujeto a las siguientes condiciones. La trampa
ERR no se ejecuta si el comando fallido es parte de la lista de comandos inmediatamente
posterior a una palabra clave until o while, es parte del test que sigue a las palabras
reservadas if o elif, es parte de un comando ejecutado en una lista && o || o si el estado
de retorno del comando está siendo invertido usando !. Estas son las mismas condiciones
que sigue la opción errexit.
Las señales ignoradas tras entrar en la shell no pueden ser atrapadas o reiniciadas. Las
señales capturadas que no están siendo ignoradas son reiniciadas a sus valores originales
en una subshell o un entorno de subshell cuando se crea alguno.
Página 47
Capítulo 4: Comandos Internos de la Shell
El estado de retorno es cero a menos que algún sigspec no especifique una señal válida.
umask
umask [-p] [-S] [modo]
Pone la mascara de creación de archivos de los procesos de shell a modo. Si modo
comienza con un dígito, se interpreta como un número octal; si no se interpreta como un
modo de máscara simbólica similar a la aceptada por el comando chmod. Si se omite
modo se imprime el valor actual de la máscara. Si se suministra la opción ' -S' sin un
argumento modo la máscara se imprime en formato simbólico. Si se suministra la opción
'-p' y se omite modo la salida se imprime en un formato que puede ser reutilizado como
entrada. El estado de retorno es cero si el modo se cambió con éxito o si no se suministró
el argumento modo, y distinto de cero en otro caso.
Advierta que cuando modo se interpreta como un número octal, cada número de umask
se resta de 7. Esto es, un valor de umask de 022 otorga los permisos 755.
unset
unset [-fv] [nombre]
Elimina cada variable o función nombre. Si no se suministran opciones o se suministra la
opción '-v' cada nombre se refiere a una variable de shell. Si se da la opción ' -f' los
nombres se refieren a funciones de shell y se elimina la definición de la función. Las
variables y funciones de sólo lectura no pueden ser eliminadas. El estado de retorno es
cero a menos que alguno de los nombres sea de sólo lectura.
-m mapaTeclas
Página 48
Capítulo 4: Comandos Internos de la Shell
Usa mapaTeclas como el mapa de teclas que será afectado por las siguientes
asociaciones. Los nombres de mapas de teclas aceptados son emacs, emacs-
standard, emacs-meta, emacs-ctls, vi, vi-move, vi-command y vi-insert. vi es
equivalente a vi-command; emacs es equivalente a emacs-standard.
-l Lista los nombres de todas las funciones de Readline
-p Muestra los nombres de las funciones de Readline y las asociaciones de tal
forma que se puedan utilizar como entrada en un archivo de inicialización de
Readline.
-P Muestra la lista actual de nombres de funciones de Readline y de
asociaciones.
-v Muestra los nombres de variables de Readline y sus valores de tal forma que
pueden ser usados como entrada o en un archivo de inicialización de la
Readline.
-V Lista los nombres de las variables actuales de Readline y sus valores.
-s Muestra las secuencias de teclas de Readline enlazadas a macros y las
cadenas que devuelven de tal modo que pueden ser usadas como entrada o en
un archivo de inicialización de Readline.
-S Muestra las secuencias de teclas de Readline asociadas a macros y las
cadenas que estas devuelven.
-f nombre_de_archivo
Lee las asociaciones de teclas a partir de nombre_de_fichero.
-q función
Consulta las teclas que invocan a la función pasada como argumento.
-u función
Desasocia todas las teclas enlazadas con la función
-r secTeclas
Elimina cualquier asociación para secTeclas.
-x secTeclas:comando-shell
Provoca que el comando-shell sea ejecutado cada vez que se introduce
secTeclas. Cuando se ejecuta el comando-shell, la shell pone en la variable
READLINE_LINE el contenido del buffer de Readline y en la variable
READLINE_POINT la localización actual del punto de inserción. Si el
comando ejecutado cambia el valor de READLINE_LINE o
READLINE_POINT, los nuevos valores se verán reflejados en el estado de
edición.
El estado de retorno es cero a menos que se suministre una opción inválida o que ocurra
un error.
builtin
builtin [comando-interno [args]]
Ejecuta un comando interno de la shell, le pasa args y devuelve su estado de salida. Esto
Página 49
Capítulo 4: Comandos Internos de la Shell
es útil cuando se define una función de shell con el mismo nombre que un comando
interno, manteniendo la funcionalidad del comando interno dentro de la función. El estado
de retorno es distinto de cero si el comando comando-interno no es un comando interno de
la shell.
caller
caller [expr]
Devuelve el contexto de cualquier llamada a subrutina activa (una función de shell o un
guión ejecutado con los comandos internos . o source).
Sin expr, caller muestra el número de línea y el nombre de archivo fuente de la llamada a
subrutina actual. Si se suministra un entero no negativo como expr, caller muestra el
número de línea, el nombre de subrutina y el archivo fuente correspondiente a esa
posición de la pila de llamadas de ejecución actual. Esta información extra se puede
utilizar, por ejemplo, para imprimir una traza de la pila. El cuadro actual es el cuadro 0.
El valor de retorno es 0 a menos que la shell no esté ejecutando una llamada a subrutina o
que expr no se corresponda con una posición válida de la pila de llamadas.
command
command [-pVv] comando [argumentos …]
Ejecuta comando con argumentos ignorando cualquier función llamada comando. Sólo se
ejecutan los comandos internos de la shell o los comandos localizados buscando en el
PATH. Si hay una función de shell llamada ls, ejecutar 'command ls' dentro de la
función ejecutará el comando externo ls en vez de llamar a la función recursivamente. La
opción '-p' significa que se debe usar el valor por defecto de PATH, el cual garantiza
encontrar todas las utilidades estándares. El estado de retorno en este caso es 127 si no se
puede encontrar el comando u ocurre algún error y el estado de salida de comando en otro
caso.
Si se suministra la opción '-v' o la opción '-V', se imprime una descripción de comando.
La opción '-v' produce que se muestre una única palabra indicando el comando o nombre
de archivo usado para invocar a comando; la opción '-V' produce una descripción más
detallada. En este caso, el estado de retorno es cero si se encuentra a comando, y distinto
de cero si no.
declare
declare [-aAfFilrtux] [-p] [nombre[=valor] …]
Declara variables y les da atributos. Si no se proporciona ningún nombre, se muestran los
valores de las variables.
La opción '-p' mostrará los atributos y los valores de cada nombre. Cuando se usa ' -p'
con argumentos nombre, se ignoran las opciones adicionales.
Cuando se suministra '-p' sin argumentos nombre, declare mostrará los atributos y
valores de todas las variables que tengan los atributos especificados por las opciones
adicionales. Si no se suministran más opciones con '-p', declare mostrará los atributos y
valores de todas las variables de shell. La opción '-f' restringirá los datos mostrados a las
funciones de shell.
La opción '-F' impide que se muestren las definiciones de función; sólo se imprimen el
nombre de la función y sus atributos. Si la opción de shell extdebug está activada usando
shopt (vea la Sección 4.3.2 [El Comando Interno Shopt]), también se mostrará el
nombre del archivo fuente y el número de línea donde se define la función. ' -F' implica a
Página 50
Capítulo 4: Comandos Internos de la Shell
'-f'. Las siguientes opciones se pueden usar para restringir la salida a las variables con los
atributos especificados o para dar atributos a las variables.
-a Cada nombre es una variable de tipo array indexado (vea la Sección 6.7
[Arrays])
-A Cada nombre es una variable de tipo array asociativo (vea la Sección 6.7
[Arrays]).
-f Usa sólo nombres de función.
-i La variable se trata como un entero; se realiza una evaluación aritmética
(vea la Sección 6.5 [Aritmética de la Shell]) cuando se asigna un valor a
la variable.
-l Cuando se asigna un valor a la variable, todos los caracteres mayúsculas
son convertidos a minúsculas. Se desactiva el atributo mayúsculas
(upper-case).
-r Convierte los nombres en de sólo lectura. A estos nombres no se les
puede asignar valores en sentencias de asignación posteriores ni se puede
eliminar su declaración.
-t Le da a cada nombre el atributo trace. Las funciones rastreadas heredan
las trampas DEBUG y RETURN de la shell que realizó la llamada. El
atributo trace no tiene un significado especial para las variables.
-u Cuando se asigna un valor a la variable, todos los caracteres minúsculas
son convertidos a mayúsculas. Se desactiva el atributo minúsculas (lower-
case).
-x Marca cada nombre para ser exportado a los comandos siguientes
mediante el entorno.
Usando '+' en vez de '-' se desactiva el atributo en vez de ser activado, con las excep-
ciones de que no se puede utilizar ' +a' para destruir variables de tipo array y ' +r' no
eliminará el atributo de sólo lectura. Cuando se usa en una función, declare hace que
cada nombre sea local a la función, como con el comando local. Si un nombre de variable
es seguido por =valor, el valor de la variable se pone a valor.
El estado de retorno es cero a menos que se encuentre una opción inválida, se intente
definir una función usando '-f foo=bar', se intente asignar un valor a una variable de
sólo lectura, se intente asignar un valor a una variable de tipo array sin usar la sintaxis de
asignación compuesta (vea la Sección 6.7 [Arrays]), alguno de los nombres no sea un
nombre de variable de shell válido, se intente desactivar el estado readonly (sólo lectura)
para una variable de sólo lectura, se intente desactivar el estado de array para una variable
de tipo array, o se intente mostrar una función inexistente con '-f'.
echo
echo [-neE] [arg …]
Devuelve los args separados por espacios y terminados con una nueva línea. El estado de
retorno es siempre 0. Si se especifica la opción ' -n' se eliminan los caracteres de
nueva_línea marginales. Si se da la opción '-e' se activa la interpretación de los caracteres
escapados por barras invertidas. La opción de shell xpg_echo se puede utilizar para
Página 51
Capítulo 4: Comandos Internos de la Shell
\a alerta (campana)
\b retroceso
\c suprime el resto de la salida
\e escape
\f salto de página
\n nueva línea
\r retorno del carro
\t tabulación horizontal
\v tabulación vertical
\\ barra invertida
\0nnn El carácter de ocho bits cuyo valor es el valor octal nnn (cero a 3 dígitos
octales)
\xHH el carácter de ocho bits cuyo valor es el valor hexadecimal HH.
enable
enable [-a] [-dnps] [-f nombre_de_archivo] [nombre …]
Activa y desactiva los comandos internos de la shell. Desactivar un comando interno
permite ejecutar un comando en disco que tenga el mismo nombre que un comando
interno de la shell sin necesidad de especificar una ruta completa, incluso aunque la shell
normalmente busca los comandos internos antes que los comandos en disco. Si se usa ' -n'
los nombres son desactivados. En caso contrario los nombres son activados. Por ejemplo,
para usar el binario test encontrado mediante $PATH en vez del comando interno
correspondiente, escriba 'enable -n test'.
Si se suministra la opción '-p' o no aparecen argumentos nombre, se imprime una lista de
los comandos internos de shell. Sin ningún otro argumento, la lista consiste en todos los
comandos internos activados. La opción '-a' significa listar cada comando interno con una
indicación de si está activado o no.
La opción '-f' significa cargar el nuevo comando interno nombre desde el objeto
compartido nombre_de_archivo, en sistemas que permiten la carga dinámica. La opción ' -
d' borrará un comando interno cargado con '-f'.
Si no hay opciones se muestra una lista de todos los comandos internos. La opción ' -s'
restringe el estado activo a los comandos internos especiales POSIX. Si se usa ' -s' con '-
f' el nuevo comando interno pasa a ser un comando interno especial (vea la Sección 4.4
[Comandos Internos Especiales]).
El estado de retorno es cero a menos que nombre no sea un comando interno o que haya
un error en la carga de un nuevo comando interno desde un objeto compartido.
Página 52
Capítulo 4: Comandos Internos de la Shell
help
help [-dms] [patrón]
Muestra información útil acerca de los comandos internos. Si se especifica patrón help da
información detallada de todos los comandos que concuerdan con el patrón, de otro modo
imprime una lista de comandos internos.
Las opciones, si son suministradas, tienen los siguientes significados:
-d Muestra una descripción corta de cada patrón
-m Muestra la descripción de cada patrón en un formato similar al de las páginas
de man.
-s Muestra sólo un corto resumen de uso para cada patrón.
El estado de retorno es cero a no ser que ningún comando concuerde con patrón.
let
let expresión [expresión]
El comando interno let permite realizar operaciones aritméticas en las variables de shell.
Cada expresión se evalúa de acuerdo con las reglas dadas más abajo, en la Sección 6.5
[Aritmética de la Shell] Si la última expresion se evalúa a 0, let devuelve 1; en caso
contrario devuelve 0.
local
local [opción] nombre[=valor] ...
Para cada argumento se crea una variable local llamada nombre y se le asigna valor. La
opción puede ser cualquiera de las opciones aceptadas por declare. local sólo puede
utilizarse dentro de una función; esto hace que la variable nombre tenga un ámbito de
visión restringido a la función y a sus hijos. El estado de retorno es cero a menos que
local se utilice fuera de una función, que el nombre suministrado sea inválido o que
nombre sea una variable de sólo lectura.
logout
logout [n]
Finaliza un shell de inicio de sesión devolviendo un estado igual a n al padre de la shell.
mapfile
mapfile [-n cantidad] [-O origen] [-s cantidad] [-t] [-u fd]
[-C llamada_de_retorno] [-c salto] [array]
Lee líneas desde la entrada estándar hacia la variable de tipo array indexado array, o desde
el descriptor de fichero fd si se suministra la opción -u. La variable MAPFILE es el array
por defecto. Las opciones, si son suministradas, tienen los siguientes significados:
-n Copia hasta un máximo de cantidad líneas. Si cantidad es 0, se copian todas
las líneas.
-O Comienza asignando a array a partir del índice origen. El índice por defecto
es 0.
-s Descarta las primeras cantidad líneas leídas.
-t Elimina un carácter marginal nueva_línea para cada línea leída.
-u Lee líneas desde el descriptor fd en vez de la entrada estándar.
-C Evalúa la llamada_de_retorno cada vez que se leen el número de líneas dadas
Página 53
Capítulo 4: Comandos Internos de la Shell
Si se especifica '-C' sin '-c' el salto por defecto es de 5000. Cuando se evalúa
llamada_de_retorno, esta suministra el índice del siguiente elemento del array para ser
asignado como un argumento adicional. La llamada_de_retorno se evalúa después de leer
la línea pero antes de que se asigne el elemento del array.
Si no se suministra con un origen explícito, mapfile limpiará el array antes de asignarle
valores.
mapfile retorna con éxito a menos que se le pase una opción inválida o un argumento de
opción inválido, que el array sea inválido o no asignable o que el array no sea de tipo
indexado.
print f
printf [-v var] formato [argumentos]
Escribe los argumentos formateados en la salida estándar bajo el control de formato. El
formato es una cadena de caracteres que contiene tres tipos de objetos: caracteres planos,
los cuales son simplemente copiados a la salida estándar, secuencias de caracteres de
escape, las cuales son convertidas y copiadas a la salida estándar, y especificaciones de
formato, cada una de las cuales produce la impresión del siguiente argumento sucesivo.
Adicionalmente a los formatos estándar de printf(1), ' %b ' produce que print f expanda las
secuencias de barras invertidas en el correspondiente argumento, (excepto el '\c' que
finaliza la salida, las barras invertidas en '\'', '\”' y '\?' no son eliminadas, y los dígitos
en octal escapados comenzando con '\0' pueden contener hasta cuatro dígitos), y ' %q '
produce que print f imprima la salida correspondiente a argumento en un formato que
pueda ser reutilizado como entrada de la shell.
La opción '-v' produce que la salida sea asignada a la variable var en vez de que sea
imprimida en la salida estándar.
El formato se reutiliza tantas veces como sea necesario para consumir todos los
argumentos. Si el formato requiere más argumentos de los que se suministran, las
especificaciones de formato adicionales se comportan como si se les hubiera suministrado
un argumento de valor cero o de cadena nula, lo que sea apropiado.
read
read [-ers] [-a anombre] [-d delim] [-i texto] [-n ncarac]
[-N carac] [-p prompt] [-t temporizador] [-u fd] [nombre
…]
Se lee una línea de la entrada estándar o desde el descriptor de fichero fd suministrado
como argumento a la opción -u y la primera palabra se asigna al primer nombre, la
segunda palabra al segundo nombre, y así de forma sucesiva, con el resto de palabras y sus
separadores intermedios asignadas al último nombre. Si hay pocas palabras leídas desde el
flujo de entrada, los nombres restantes son asignados a valores vacíos. Se utilizan los
caracteres en el valor de la variable IFS para separar la línea en palabras. El carácter barra
invertida '\' se puede utilizar para eliminar cualquier significado especial en el siguiente
carácter leído y para continuar la línea. Si no se suministran nombres la línea leída se
asigna a la variable REPLY . El código devuelto es cero a menos que se encuentre el
final_de_fichero, la lectura expire (en cuyo caso el código devuelto es mayor que 128), o
Página 54
Capítulo 4: Comandos Internos de la Shell
Página 55
Capítulo 4: Comandos Internos de la Shell
Página 56
Capítulo 4: Comandos Internos de la Shell
Página 57
Capítulo 4: Comandos Internos de la Shell
unalias
unalias [-a] [nombre …]
Elimina cada nombre de la lista de alias. Si se suministra '-a' se eliminan todos los alias.
Los alias se describen en la Sección 6.6 [Alias].
Página 58
Capítulo 4: Comandos Internos de la Shell
sean buscados para ejecutarlos. Esta opción está activada por defecto.
-k Todos los argumentos en forma de sentencias de asignación se sitúan en el
entorno para un comando, no sólo aquellos que preceden al nombre del
comando.
-m Activa el control de tareas (vea el Capítulo 7 [Tareas de Control]).
-n Lee comandos pero no los ejecuta; esto se puede usar para comprobar un
guión de comandos en busca de errores sintácticos. Esta opción es ignorada
por las shells interactivas.
-o nombre-opción
Establece la opción correspondiente a nombre-opción:
allexport como -a.
braceexpand como -B.
emacs Utiliza un interfaz de edición de líneas al estilo emacs (vea
el Capítulo 8 [Edición de la Línea de Comandos]). Esto
también afecta al interfaz de edición usado por read -e.
errexit como -e.
errtrace como -E.
functrace como -T.
hashall como -h.
histexpand como -H.
history Activa la historia de comandos, como se describe en la
Sección 9.1 [Características de Historia de Bash]. Esta
opción está activada por defecto en las shells interactivas.
ignoreeof Una shell interactiva no saldrá tras leer un EOF.
keyword como -k.
monitor como -m.
noclobber como -C.
noexec como -n.
noglob como -f.
nolog Actualmente es ignorado.
notify como -b.
nounset como -u.
onecmd como -t.
physical como -P.
pipefail Si está establecido, el valor de retorno de una tubería es el
valor del último comando (el situado más a la derecha) que
Página 59
Capítulo 4: Comandos Internos de la Shell
Página 60
Capítulo 4: Comandos Internos de la Shell
casos.
-H Activa la sustitución de la historia estilo '!' (vea la Sección 9.3
[Interaccionando con la Historia]). Esta opción está activada por defecto en
las shells interactivas.
-P Si está establecida, no sigue los enlaces simbólicos cuando ejecuta comandos
como cd el cual cambia el directorio actual. En su lugar se utiliza el
directorio físico. Por defecto Bash sigue la cadena lógica de directorios
cuando realiza comandos que cambian el directorio actual.
Por ejemplo si '/usr/sys' es un enlace simbólico a '/usr/local/sys' entonces:
$ cd /usr/sys; echo $PWD
/usr/sys
$ cd ..; pwd
/usr
Si set -P está activado:
$ cd /usr/sys; echo $PWD
/usr/local/sys
$ cd ..; pwd
/usr/local
-T Si está establecida, cualquier trampa en DEBUG y RETURN es heredada por
las funciones de shell, la sustitución de comandos y los comandos ejecutados
en un entorno de subshell. Las trampas DEBUG y RETURN normalmente no
son heredadas en tales casos.
-- Si ningún argumento sigue a esta opción, entonces se quitan los parámetros
posicionales. En caso contrario, los parámetros posicionales se asignan a los
argumentos incluso si alguno de ellos comienza con un '-'.
- Indica el final de las opciones, produce que todos los argumentos restantes
sean asignados a los parámetros posicionales. Las opciones ' -x' y '-v' son
desactivadas. Si no hay argumentos, los parámetros posicionales permanecen
sin cambios.
Usar '+' en vez de '-' produce que las opciones sean desactivadas. Las opciones también se
pueden usar en la invocación de la shell. Se puede encontrar el conjunto de opciones
actuales en $-.
Los N argumentos restantes son parámetros posicionales y se asignan, en orden, a $1 , $2 ,
…, $N . Al parámetro especial # se le asigna el valor N.
El estado de retorno es siempre cero a menos que se suministre alguna opción inválida.
Página 61
Capítulo 4: Comandos Internos de la Shell
produce que la salida sea mostrada en un formato que permite ser reutilizado como
entrada. El resto de opciones tienen los siguientes significados:
-s Activa cada nombreopt.
-u Desactiva cada nombreopt.
-q Elimina la salida normal; el estado de retorno indica si el nombreopt está
activado o desactivado. Si se dan múltiples argumentos nombreopt con '-q',
el estado de retorno es cero si todos los nombreopt están activados y distinto
de cero en caso contrario.
-o Restringe los valores de nombreopt a aquellos definidos para la opción ' -o'
para el comando interno set (vea la Sección 4.3.1 [El Comando Interno
Set]).
Si se utilizan las opciones '-s' o '-u' sin argumentos nombreopt, se muestran únicamente
aquellas opciones que están establecidas o no, respectivamente.
A menos que se avise de lo contrario, las opciones de shopt están desactivadas por
defecto.
El estado de retorno cuando se listan opciones es cero si todos los nombres_de_opción
están activados y distinto de cero en caso contrario. Cuando se establecen o borran
opciones, el estado de retorno es cero a menos que un nombreopt no sea una opción de
shell válida.
La lista de opciones de shopt es:
autocd
Si está establecida, se ejecuta un nombre de comando que coincida con el
nombre de un directorio como si fuera el argumento para el comando cd. Esta
opción sólo se usa en las shells interactivas.
cdable_vars
Si esta opción está establecida, se asume que un argumento para el comando
interno cd que no es un directorio es el nombre de una variable cuyo valor es
el directorio al que cambiar.
cdspell
Si está establecida, se corregirán pequeños errores en el deletreo de un
componente de directorio para el comando cd. Los errores que se buscan son
permutaciones de caracteres, caracteres perdidos y un carácter en exceso. Si
se encuentra una corrección se imprime la ruta correcta y el comando se
ejecuta. Esta opción sólo se usa en shells interactivas.
checkhash
Si está establecida, Bash chequea que un comando encontrado en la tabla hash
exista antes de intentar ejecutarlo. Si un comando de dicha tabla ahora no
existe se realiza una búsqueda de ruta de la forma habitual.
checkjobs
Si está establecida, Bash lista el estado de cualquier tarea detenida o en eje-
cución antes de terminar una shell interactiva. Si existen tareas en ejecución la
salida se retrasa hasta que se intenta una segunda salida sin que intervenga un
Página 62
Capítulo 4: Comandos Internos de la Shell
Página 63
Capítulo 4: Comandos Internos de la Shell
[Variables de Bash]).
5. Se activa la traza de funciones: la sustitución de comandos, las funciones
de shell y las subshells invocadas con ( comando ) heredan las trampas
DEBUG y RETURN.
6. Se activa la traza de errores: la sustitución de comandos, las funciones
de shell y las subshells invocadas con ( comando ) heredan la trampa
ERROR.
extglob
Si está establecida, se activan las características de concordancia de patrones
extendidos (vea la Sección 3.5.8.1 [Concordancia de Patrones]).
extquote
Si está establecida, el entrecomillado $'cadena' y $”cadena” se realiza
dentro de las expansiones de ${parámetro} encerradas entre dobles comillas.
Esta opción está activada por defecto.
failglob
Si está establecida, los patrones que fallan al ajustar nombres de archivo
durante la expansión de nombres de archivo resultan en un error de expansión.
force-fignore
Si está establecida, los sufijos especificados por la variable de shell FIGNORE
producen que las palabras sean ignoradas cuando se realiza el completado de
palabras, incluso si las palabras ignoradas son los únicos resultados posibles
del completado. Vea la Sección 5.2 [Variables de Bash] para obtener una
descripción de FIGNORE. Esta opción está activada por defecto.
globstar
Si está establecida, el patrón '**' usado en un contexto de expansión de
nombres de fichero concordará con los ficheros y cero o más directorios y
subdirectorios. Si el patrón es seguido por una '/', sólo concordarán los
directorios y subdirectorios.
gnu_errfmt
Si está establecida, los mensajes de error de la shell se escribirán en el formato
de mensajes de error estándar de GNU.
histappend
Si está establecida, cuando la shell finaliza, la lista de historia se anexa al
archivo cuyo nombre se da en el valor de la variables HISTFILE en vez de
sobreescribir el archivo.
histreedit
Si está establecida, y se está utilizando Readline, el usuario tendrá la
oportunidad de reeditar una sustitución de la historia fallida.
histverify
Si está establecida, y se está usando Readline, los resultados de la sustitución
de la historia no son pasados inmediatamente al analizador de la shell. En vez
de eso, la línea resultante se carga en el buffer de edición de líneas leídas,
permitiendo su posterior modificación.
hostcomplete
Si está establecida, y se está usando Readline, Bash intentará realizar el
Página 64
Capítulo 4: Comandos Internos de la Shell
Página 65
Capítulo 4: Comandos Internos de la Shell
llado tras ser expandidas como se describe más abajo (vea la Sección 6.9
[Imprimiendo un prompt]). Esta opción está activada por defecto.
restricted_shell
La shell establece esta opción si es iniciada en modo restringido (vea la
Sección 6.10 [La Shell Restringida]). Su valor no se puede cambiar. Este no
es reiniciado cuando se ejecutan los archivos de inicio, permitiendo a los
archivos de inicio descubrir si la shell está restringida o no.
shift_verbose
Si está establecida, el comando interno shift imprime un mensaje de error
cuando el contador de desplazamientos excede el número de parámetros
posicionales.
sourcepath
Si está establecida, el comando interno source usa los valores del PATH para
encontrar el directorio que contiene el archivo suministrado como argumento.
Esta opción está activada por defecto.
xpg_echo
Si está establecida, el comando interno echo expandirá por defecto las
secuencias escapadas por una barra inclinada.
El estado de retorno cuando se listan opciones es cero si todos los nombres_de_opción
están activados y distinto de cero en otro caso. Cuando se establecen o quitan opciones, el
estado de retorno es cero a menos que un nombreopt no sea una opción de shell válida.
Página 66
Capítulo 5: Variables de la shell
Página 67
Capítulo 5: Variables de la shell
Página 68
Capítulo 5: Variables de la shell
BASH_COMMAND
El comando que está siendo ejecutado actualmente o está a punto de ser ejecutado, a
menos que la shell esté ejecutando un comando como resultado de una trampa, en cuyo
caso este es el comando que se ejecutaba en el momento de la trampa.
BASH_ENV
Si esta variable está establecida cuando se invoca a Bash para ejecutar un guión de
comandos, su valor se expande y se usa como el nombre del fichero de inicio que debe ser
leído antes de ejecutar el guión. Vea la Sección 6.2 [Archivos de Inicio de Bash].
BASH_EXECUTION_STRING
El argumento del comando para la opción de invocación '-c'.
BASH_LINENO
Una variable de tipo array cuyos miembros son los números de línea en los archivos fuente
correspondientes a cada miembro de FUNCNAME . ${BASH_LINENO[$i]} es el número
de línea en el archivo fuente donde se llamó a ${FUNCNAME[$i]} (o $
{BASH_LINENO[$i-1]} si es referenciado dentro de otra función de shell). El nombre de
archivo correspondiente es ${BASH_SOURCE[$i]} . Use LINENO para obtener el número
de línea actual.
BASH_REMATCH
Una variable de tipo array cuyos miembros son asignados por el operador binario '=~'
para el comando condicional [[ (vea la Sección 3.2.4.2 [Construcciones Condicionales]).
El elemento con índice 0 es la porción de la cadena que concuerda con toda la expresión
regular. El elemento con índice n es la porción de la cadena que concuerda con la n- ésima
subexpresión parentizada. Esta variable es de sólo lectura.
BASH_SOURCE
Una variable de tipo array cuyos miembros son los nombres de archivo correspondientes a
los elementos en la variable de tipo array FUNCNAME .
BASH_SUBSHELL
Es incrementado en una unidad cada vez que se genera una subshell o un entorno de
subshell. El valor inicial es 0.
BASH_VERSINFO
Una variable de sólo lectura de tipo array (vea la Sección 6.7 [Arrays]) cuyos miembros
mantienen la información de versión para esta instancia de Bash. Los valores son
asignados a los miembros del array como sigue:
BASH_VERSINFO[0]
El número de versión mayor (la distribución).
BASH_VERSINFO[1]
El número de versión menor (la versión).
BASH_VERSINFO[2]
El nivel de parcheado
BASH_VERSINFO[3]
La versión de construcción.
BASH_VERSINFO[4]
El estado de la distribución (p.e., beta1).
Página 69
Capítulo 5: Variables de la shell
BASH_VERSINFO[5]
El valor de MACHTYPE.
BASH_VERSION
El número de versión de la instancia actual de Bash.
BASH_XTRACEFD
Si está establecido a un entero que corresponde con un descriptor de archivo válido, Bash
escribirá la salida de traza generada cuando ' set -x' está activo a ese descriptor de fichero.
Esto permite que la salida de traza sea aislada para mensajes de diagnóstico y de error. El
descriptor de fichero se cierra cuando BASH_XTRACEFD está inactivo o se le asigna un
nuevo valor. Quitar BASH_XTRACEFD o asignarle la cadena vacía produce que la salida
de traza sea enviada a la salida de error estándar. Advierta que ajustar
BASH_XTRACEFD a 2 (el descriptor de fichero de la salida de error estándar) y luego
quitarlo provocará que se cierre la salida de error estándar.
COLUMNS
Usado por el comando interno select para determinar la anchura del terminal cuando
imprime listas de selección. Se establece automáticamente con la recepción de un
SIGWINCH .
COMP_CWORD
Un índice en ${COMP_WORDS} de la palabra que contiene la posición actual del cursor.
Esta variable está disponible sólo en funciones de shell invocadas por las características de
completado programable (vea la Sección 8.6 [Completado Programable]).
COMP_LINE
La línea de comandos actual. Esta variable está disponible sólo en funciones de shell y en
comandos externos invocados por las características de completado programable (vea la
Sección 8.6 [Completado Programable]).
COMP_POINT
El índice de la posición actual del cursor relativa al comienzo del comando actual. Si la
posición actual del cursor es al final del comando actual, el valor de esta variable es igual a
${#COMP_LINE} . Esta variable está disponible sólo en funciones de shell y en comandos
externos invocados por las características de completado programable (vea la Sección 8.6
[Completado Programable]).
COMP_TYPE
Se establece a un valor entero que corresponde al tipo de completado que se ha intentado
y que causó la llamada a una función de completado: TAB para completado normal, '?'
para listas completados tras los sucesivos tabs, '!' para listar alternativas en el completado
parcial de palabras, '@' para listar completados si la palabra no se ha modificado, o ' %'
para completado de menú. Esta variable está disponible sólo en funciones de shell y en
comandos externos invocados por las características de completado programable (vea la
Sección 8.6 [Completado Programable])
COMP_KEY
La llave (o llave final o una secuencia de llaves) usada para invocar la función de
completado actual.
COMP_WORDBREAKS
El juego de caracteres que la librería Readline trata como separadores de palabras cuando
realiza el completado de palabras. Si se elimina COMP_WORDBREAKS , esta pierde sus
Página 70
Capítulo 5: Variables de la shell
Página 71
Capítulo 5: Variables de la shell
Página 72
Capítulo 5: Variables de la shell
HISTIGNORE
Una lista de patrones separados por dos puntos usada para decidir qué líneas de comandos
deben ser guardados en la lista de historia. Cada patrón es anclado al principio de la línea
y debe encajar con la línea completa (no se añade ' *' al final). Cada patrón se comprueba
con la línea después de que se realicen las comprobaciones especificadas por
HISTCONTROL . Adicionalmente a los caracteres de ajuste de patrones normales de la
shell, el carácter '&' concuerda con la línea de historia previa. El '&' puede ser escapado
usando una barra invertida; la barra invertida se elimina antes de intentar un ajuste. No se
comprueba la segunda y sucesivas líneas de un comando compuesto multilínea, y son
añadidas a la historia sin importar el valor de HISTIGNORE .
HISTIGNORE incluye la función de HISTCONTROL . Un patrón '&' es idéntico a
ignoresdups, y un patrón '[]*' es idéntico a ignorespace. Combinando estos dos patrones,
separados por un dos puntos, obtenemos la funcionalidad de ignoreboth.
HISTSIZE
El número máximo de comandos que deben ser mantenidos en la lista de historia. El valor
por defecto es 500.
HISTTIMEFORMAT
Si esta variable está establecida y no es nula, su valor se usa como una cadena de formato
para strftime para imprimir la marca de tiempo asociada con cada entrada de la historia
mostrada por el comando interno history. Si esta variable está establecida, las marcas de
tiempo se escriben al archivo de historia de forma que pueden ser mantenidas a través de
las sesiones de la shell. Esta usa el carácter de comentario de la historia para distinguir las
marcas de tiempo del resto de líneas de la historia.
HOSTFILE
Contiene el nombre de un fichero en el mismo formato que '/etc/hosts' que debería ser
leído cuando la shell necesite completar un nombre de anfitrión (host). La lista de posibles
completados de nombres de anfitrión puede ser modificada durante la ejecución de la
shell; la siguiente vez que se intente el completado de nombres de anfitrión después de que
el valor de esta variable haya cambiado, Bash añadirá el contenido del nuevo archivo a la
lista existente. Si HOSTFILE está establecido pero no tiene valor, o este no se corresponde
con un fichero legible, Bash intentará leer '/etc/hosts' para obtener la lista de posibles
completados de nombres de anfitrión. Cuando se elimina la variable HOSTFILE , se limpia
la lista de nombres de anfitrión.
HOSTNAME
El nombre del anfitrión (host) actual.
HOSTTYPE
Una cadena que describe la máquina en la que se está ejecutando Bash.
IGNOREEOF
Controla la acción de la shell a la recepción de un carácter EOF (fin de fichero) cómo
única entrada. Si está establecido, el valor indica el número de caracteres EOF
consecutivos que pueden ser leídos como el primer carácter de una entrada antes de que la
shell finalice. Si la variable existe pero no tiene un valor numérico (o simplemente no tiene
valor) entonces el valor por defecto es 10. Si la variable no existe, entonces EOF significa
el fin de la entrada para la shell. Esta variable sólo tiene efecto para las shells interactivas.
Página 73
Capítulo 5: Variables de la shell
INPUTRC
El nombre del archivo de inicialización de Readline, sobreescribiendo el valor por defecto
'~/.inputrc'
LANG
Se utiliza para determinar la categoría de localización para cualquier categoría no
seleccionada específicamente con una variable cuyo nombre comience con LC_ .
LC_ALL
Esta variable sobreescribe el valor de LANG y cualquier otra variable LC_ especificando
una categoría de localización.
LC_COLLATE
Esta variable determina el orden de clasificación empleado cuando se ordenan los
resultados de una expansión de nombre de fichero, y determina el comportamiento de las
expresiones de rango, las clases de equivalencia, y las secuencias de clasificación dentro de
una expansión de nombres de archivo y concordancia de patrones (vea la Sección 3.5.8
[Expansión de Nombres de Fichero]).
LC_CTYPE
Esta variable determina la interpretación de caracteres y el comportamiento de las clases
de caracteres dentro de una expansión de nombres de fichero y concordancia de patrones
(vea la Sección 3.5.8 [Expansión de nombres de Fichero]).
LC_MESSAGES
Esta variable determina la localización usada para traducir las cadenas entre comillas
dobles precedidas por un '$' (vea la Sección 3.1.2.5 [Traducción de Localización]).
LC_NUMERIC
Esta variable determina la categoría de localización usada para el formateado numérico.
LINENO
El número de línea en el guión de comandos o en la función de shell que se está eje-
cutando actualmente.
LINES
Usada por el comando interno select para determinar la longitud de columna para
imprimir listas de selección. Se establece automáticamente tras recibir una señal
SIGWINCH .
MACHTYPE
Una cadena que describe completamente el tipo de sistema en el que se está ejecutando
Bash, en el formato estándar de GNU cpu-company-system.
MAILCHECK
Con cuanta frecuencia (en segundos) la shell debería buscar correo en los archivos
especificados en las variables MAILPATH o MAIL . El valor por defecto es 60 segundos.
Cuando llega el momento de comprobar el correo, la shell lo hace antes de mostrar el
prompt primario. Si esta variable se quita o se ajusta a un valor que no es un número
mayor o igual que cero, la shell desactiva la comprobación del correo.
OLDPWD
Es el directorio de trabajo previo como se establece por el comando interno cd.
OPTERR
Si se establece al valor 1, Bash muestra los mensajes de error generados por el comando
Página 74
Capítulo 5: Variables de la shell
interno getopts.
OSTYPE
Una cadena que describe el sistema operativo en el que se está ejecutando Bash.
PIPESTATUS
Una variable de tipo array (vea la Sección 6.7 [Arrays]) que contiene una lista de valores
de estados de salida de los procesos en la tubería más recientemente ejecutada en primer
plano (la cual puede contener sólo un único comando).
POSIXLY_CORRECT
Si esta variable está en el entorno cuando Bash comienza, la shell entra en el modo POSIX
(vea la Sección 6.11 [El Modo POSIX de Bash]) antes de leer los archivos de inicio, como
si se hubiese suministrado la opción de invocación ' --posix'. Si es establecida mientras
la shell está en ejecución, Bash activa el modo POSIX, como si se hubiese ejecutado el
comando set -o posix
PPID
El ID de proceso del proceso padre de la shell. Esta variable es de sólo lectura.
PROMPT_COMMAND
Si está establecida, su valor es interpretado como un comando a ejecutar antes de
imprimir cada prompt primario ($PS1 ).
PROMPT_DIRTRIM
Si está establecido en un número mayor que cero, su valor se usa como el número de
componentes de rastreo de directorio a mantener cuando se expanden las cadenas de
escape de prompt \w y \W (vea la Sección 6.9 [Imprimiendo un Prompt]). Los caracteres
eliminados son reemplazados con una elipsis '..'
PS3
El valor de esta variable se utiliza como el prompt para el comando select. Si esta
variable no está establecida, se utiliza como prompt para el comando select el '#?'.
PS4
Este valor es el prompt que se imprime antes de imprimir la línea de comandos cuando la
opción '-x' está establecida (vea la Sección 4.3.1 [El Comando Interno Set]). El primer
carácter de PS4 se replica varias veces, tantas como sea necesario, para indicar múltiples
niveles de indirección. El valor por defecto es '+'.
PWD
El directorio de trabajo actual como se establece por el comando interno cd.
RANDOM
Cada vez que se referencia a este parámetro se genera un entero aleatorio entre 0 y 32767.
Un valor asignado a esta variable se utiliza como semilla para el generador de números
aleatorios.
REPLY
La variable por defecto para el comando interno read.
SECONDS
Esta variable se expande al número de segundos transcurridos desde que se inició la shell.
Asignar un valor a esta variable reinicia la cuenta al valor asignado, y el valor expandido se
convierte en el valor asignado más el número de segundos desde la asignación.
Página 75
Capítulo 5: Variables de la shell
SHELL
La ruta completa a la shell se guarda en esta variable del entorno. Si no está establecida
cuando la shell comienza, Bash le asigna la ruta completa de la shell de inicio de sesión del
usuario.
SHELLOPTS
Una lista separada por dos puntos de opciones de shell que están activas. Cada palabra en
la lista es un argumento válido para la opción ' -o' del comando interno set (vea la
Sección 4.3.1 [El Comando Interno Set]). Las opciones que aparecen en SHELLOPTS
son aquellas que se muestran como activas ('on') por el comando 'set -o'. Si esta variable
está en el entorno cuando Bash se inicia, cada opción de la shell incluida en la lista se
activará antes de leer cualquier fichero de inicio. Esta variable es de sólo lectura.
SHLVL
Es incrementada en una unidad cada vez que se inicia una nueva instancia de Bash. Esto
es útil para contar cómo de profundo se anidan sus shells de Bash.
TIMEFORMAT
El valor de este parámetro se utiliza como una cadena de formato especificando cómo se
debería mostrar la información de temporización para las tuberías prefijadas con la
palabra reservada time. El carácter '%' introduce una secuencia de escape que es
expandida a un valor de tiempo o a alguna otra información. Las secuencias de escape y
sus significados son como siguen; los corchetes denotan partes opcionales.
%% Un literal '%'
%[p][l]R El tiempo transcurrido en segundos
%[p][l]U El número de segundos de CPU gastados en el modo de usuario.
%[p][l]S El número de segundos de CPU gastados en el modo de sistema.
%P El porcentaje de CPU, calculado como (%U + %S) / %R
La p opcional es un dígito que especifica la precisión, el número de dígitos fraccionarios
tras un punto decimal. Un valor igual a 0 produce que no se imprima la parte decimal. Se
pueden especificar como mucho tres lugares tras el punto decimal; valores de p mayores
que 3 se cambian a 3. Si no se especifica p se utiliza el valor 3.
La l opcional especifica un formato largo, incluyendo minutos, de la forma MmmSS.FFs.
El valor de p determina cuando o cuando no se utilizan la parte fraccionaria.
Si esta variable no está establecida, Bash actua como si tuviera el valor
$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
Si el valor es nulo, no se muestra información de temporización. Se añade un carácter
nueva línea al margen cuando se muestra la cadena de formato.
TMOUT
Si está establecido a un valor mayor que cero, TMOUT se trata como el temporizador por
defecto del comando interno read (vea la Sección 4.2 [Comandos Internos de Bash]). El
comando select (vea la Sección 3.2.4.2 [Construcciones Condicionales]) termina si la
entrada no llega después de transcurrir TMOUT segundos cuando la entrada viene desde
una terminal.
En una shell interactiva, el valor se interpreta como el número de segundos a esperar por
Página 76
Capítulo 5: Variables de la shell
una entrada tras mostrar el prompt primario. Bash termina tras transcurrir este número de
segundos si no se recibe la entrada.
TMPDIR
Si está establecida, Bash utiliza este valor como el nombre de un directorio en el cual Bash
crea los archivos temporales de los usuarios de la shell.
UID
El valor numérico del id de usuario real del usuario actual. Esta variable es de sólo lectura.
Página 77
Capítulo 6: Características de Bash
Página 78
Capítulo 6: Características de Bash
--posix
Cambia el comportamiento de Bash cuando las operaciones por defecto difieren del
estándar POSIX para que se ajuste al estándar. Esto tiene como objetivo hacer que Bash
se comporte como un superconjunto estricto de ese estándar. Vea la Sección 6.11 [El
Modo POSIX de Bash] para una descripción del modo POSIX de Bash.
--restricted
Hace la shell una shell restringida (vea la Sección 6.10 [La Shell Restringida]).
--verbose
Equivalente a '-v'. Imprime líneas de entrada de shell conforme son leídas.
--version
Muestra información de versión para esta instancia de Bash en la salida estándar y sale
con éxito.
Hay varias opciones de un único carácter que se pueden suministrar en la invocación y que no
están disponibles con el comando interno set.
-c cadena
Lee y ejecuta comandos desde cadena tras procesar las opciones y luego
finaliza. Cualquier argumento adicional se asigna a los parámetros
posicionales, comenzando con $0 .
-i Fuerza a la shell a ejecutarse de forma interactiva. Las shells interactivas se
describen en la Sección 6.3 [Shells Interactivas].
-l Hace que la shell actúe como si hubiese sido invocada directamente por el
inicio de sesión. Cuando la shell es interactiva, esto equivale a comenzar una
shell de inicio de sesión con 'exec -l bash'. Cuando la shell no es
interactiva, se ejecutarán los archivos de inicio de la shell de inicio de sesión.
'exec bash -l' o 'exec bash –login' reemplazará a la shell actual
con una shell de inicio de sesión de Bash. Vea la Sección 6.2 [Archivos de
Inicio de Bash], para una descripción del comportamiento especial de una
shell de inicio de sesión.
-r Hace la shell de tipo restringido (vea la Sección 6.10 [La Shell Restringida]).
-s Si esta opción está presente, o si no quedan argumentos tras el procesado de
las opciones, se leen los comandos desde la entrada estándar. Esta opción
permite que se establezcan parámetros posicionales cuando se invoca una
shell interactiva.
-D Se imprime una lista de cadenas entre comillas dobles precedidas cada una
de ellas por '$' en la salida estándar. Estas son cadenas que están sujetas a
traducción de lenguaje cuando la localización actual no es C o POSIX (vea la
Sección 3.1.2.5 [Traducción de Localizaciónes] , Esto implica la opción ' -n';
no se ejecutará ningún comando.
[-+][opcion_shopt]
La opcion_shopt es una de las opciones de shell aceptadas por el comando
interno shopt (vea la Sección 4.3.2 [El Comando Interno Shopt]). Si
opción_shopt está presente, '-O' establece el valor de dicha opción; ' +O' la
Página 79
Capítulo 6: Características de Bash
Página 80
Capítulo 6: Características de Bash
Página 81
Capítulo 6: Características de Bash
Página 82
Capítulo 6: Características de Bash
[Señales]).
10. En ausencia de cualquier trampa, la señal SIGINT es capturada y manejada (vea la Sección
3.7.6 [Señales]). SIGINT interrumpirá algunos comandos internos de shell.
11. Una shell interactiva de inicio de sesión al finalizar enviará un SIGHUP a todas sus tareas si la
opción de shell huponexit está activada (vea la Sección 3.7.6 [Señales]).
12. La opción de invocación '-n' se ignora, y 'set -n' no tiene ningún efecto (vea la Sección 4.3.1
[El Comando Interno Set]).
13. Bash comprobará el correo periódicamente, dependiendo de los valores de las variables de
shell MAIL , MAILPATH y MAILCHECK (vea la Sección 5.2 [Variables de Bash]).
14. Los errores de expansión debidos a referencias a variables de shell no ligadas después de que
se haya activado 'set -u' no provocarán que la shell finalice (vea la Sección 4.3.1 [El Comando
Interno Set]).
15. La shell no finalizará en errores de expansión causados por una variable var no establecida o
con valor nulo en expansiones de tipo ${var:?palabra} (vea la Sección 3.5.3 [Expansión de
Parámetros de Shell]).
16. Los errores de redirección encontrados por los comandos internos de la shell no provocan que
la shell finalice.
17. Cuando se ejecuta en modo POSIX, un comando interno especial que retorne un estado de
error no producirá que la shell finalice (vea la Sección 6.11 [El Modo POSIX de Bash]).
18. Un exec fallido no provocará que la shell finalice (vea la Sección 4.1 [Comandos Internos de
la Shell Bourne]).
19. Los errores del analizador no provocarán que la shell finalice.
20. Las correcciones de deletreado únicas en argumentos directorio para el comando interno cd
están activadas por defecto (vea la descripción de la opción cdspell para el comando interno
shopt en la Sección 4.3.2 [El Comando Interno Shopt]).
21. La shell comprobará el valor de la variable TMOUT y finalizará si un comando no es leído
dentro del número de segundos especificado tras imprimir $PS1 (vea la Sección 5.2 [Variables
de Bash]).
Página 83
Capítulo 6: Características de Bash
Página 84
Capítulo 6: Características de Bash
Verdad si las cadenas son iguales. Con los comandos test se debería usar '='
para cumplir con el estándar POSIX.
cadena1 != cadena2
Verdad si las cadenas no son iguales.
cadena1 < cadena2
Verdad si cadena1 se ordena lexicográficamente antes que cadena2.
cadena1 > cadena2
Verdad si cadena1 se ordena lexicográficamente después de cadena2.
arg1 OP arg2 OP es uno de los siguientes operadores: '-eq'. '-ne', '-lt'. '-le', '-gt' o
'-ge'. Estos operadores de aritmética binaria devuelven verdad ( true) si arg1
es igual que, distinto a, menor que, menor o igual que, mayor que, o mayor o
igual que arg2, respectivamente. arg1 y arg2 pueden ser enteros positivos o
negativos.
Página 85
Capítulo 6: Características de Bash
operador condicional.
= *= /= %= += -= <<= >>= &= ^= |=
asignaciones
expr1 , expr2 coma
Las variables de shell pueden funcionar como operandos; se realiza expansión de parámetros
antes de evaluar la expresión. Dentro de una expresión, las variables de shell pueden ser referenciadas
por un nombre sin usar la sintaxis de expansión de parámetros. Una variable de shell que sea nula o no
esté definida se evalúa a 0 cuando es referenciada por su nombre sin usar la sintaxis de expansión de
parámetros. El valor de una variable se evalúa como una expresión aritmética cuando es referenciada,
o cuando una variable a la cual se le ha dado el atributo entero usando ' declare -i' es asignada a un
valor. Un valor nulo se evalúa a 0. Una variable de shell no necesita tener su atributo entero activado
para ser usada en una expresión.
Las constantes comenzando con un 0 se interpretan como números en base octal. Un '0x' o '0X'
al inicio indica un número en hexadecimal. De otro modo, los números que tienen la forma
[base#]n, donde base es un número decimal entre 2 y 64 representando la base aritmética, y n es un
número en esa base. Si se omite base#, entonces se utiliza la base 10. Los dígitos mayores que 9 se
representan con letras minúsculas, letras mayúsculas, '@' y '_' en ese orden. Si base es menor o igual
a 36 las letras minúsculas y mayúsculas pueden ser usadas indistintamente para representar los
números entre 10 y 35.
Los operadores se evalúan en el orden de precedencia. Primero se evalúan las sub-expresiones
entre paréntesis; de esta forma se pueden sobreescribir las reglas de precedencia anteriores.
6.6.- Alias
Los alias permiten que una cadena sea sustituida por una palabra cuando esta se utiliza como la
primera palabra de un comando simple. La shell mantiene una lista de alias que pueden ser estable-
cidos o eliminados con los comandos internos alias y unalias respectivamente.
La primera palabra de cada comando simple, si no está entrecomillada, se comprueba para ver si
es un alias. Si lo es, esa palabra se reemplaza por el texto del alias. Los caracteres '/', '$', ''', '=' y
cualquier otro metacaracter de la shell o carácter entrecomillado listado anteriormente no pueden
aparecer en un nombre de alias. El texto sustituido puede contener cualquier entrada de shell válida,
incluyendo metacaracteres de la shell. La primera palabra del texto reemplazado se comprueba en
busca de alias, pero una palabra que sea idéntica a un alias que está siendo expandido no es expandida
por segunda vez. Esto significa que uno puede construir un alias ls que ejecute, por ejemplo, el
comando “ls -F”, y Bash no intentará expandir recursivamente el texto reemplazado. Si el último
carácter del valor del alias es un espacio o un carácter tabulación, entonces también se comprueba la
siguiente palabra de comando que siga al alias en busca de expansión de alias.
Los alias se crean y listan con el comando alias, y se eliminan con el comando unalias.
No hay mecanismos para usar argumentos en el texto sustituido, como en csh. Si se necesitan
argumentos, se debe usar una función de shell (vea la Sección 3.3 [Funciones de Shell]).
Los alias no se expanden cuando la shell no es interactiva, a menos que se establezca la opción de
shell expand_aliases usando shopt (vea la Sección 4.3.2 [El Comando Interno Shopt]).
Las reglas concernientes a la definición y uso de alias pueden ser algo confusas. Bash siempre lee
al menos una línea completa de la entrada antes de ejecutar cualquiera de los comandos de esa línea.
Los alias se expanden cuando se lee un comando, no cuando se ejecuta. De esta forma, una definición
de alias que aparezca en la misma línea que otro comando no tendrá efecto hasta que se lea la
Página 86
Capítulo 6: Características de Bash
siguiente línea de la entrada. Los comandos que siguen a la definición del alias en esa línea no se ven
afectados por el nuevo alias. Este comportamiento es también un problema cuando se ejecutan
funciones. Los alias se expanden cuando se lee una definición de función, no cuando se ejecuta la
función, puesto que una definición de función es por sí misma un comando compuesto. Como
consecuencia, los alias definidos en una función no están disponibles hasta después de que se ejecute
dicha función. Para estar seguros, ponga siempre las definiciones de alias en una línea separada, y no
use alias en comandos compuestos.
Para casi cualquier propósito, se prefiere las funciones de shell sobre los alias.
6.7.- Arrays
Bash proporciona variables de tipo array unidimensional indexado y de tipo array asociativo. Cual-
quier variable se puede utilizar como un array indexado; el comando interno declare declarará
explícitamente un array. No hay un límite máximo al tamaño de un array, ni ninguna obligación de
que los miembros sean indexados o asignados contiguamente. Los arrays indexados se referencian
usando enteros, incluyendo expresiones aritméticas (vea la Sección 6.5 [Aritmética de la Shell]) y
comienzan con el índice cero; los arrays asociativos utilizan cadenas arbitrarias.
Se crea automáticamente un array indexado si se asigna alguna variable usando la sintaxis:
nombre[índice]=valor
El índice se trata como una expresión aritmética que debe ser evaluada a un número mayor o
igual que cero. Para declarar un array de forma explícita utilice:
declare -a nombre
La sintaxis
declare -a nombre[índice]
también es válida; el índice se ignora
Los arrays asociativos se declaran usando
declare -A nombre
Se pueden especificar atributos para una variable de tipo array usando los comandos internos
declare y readonly. Cada atributo se aplica a todos los miembros de un array.
Los arrays se pueden asignar en asignaciones compuestas de la forma:
nombre=(valor1 valor2 … valorn)
donde cada valor es de la forma [índice]=cadena. Las asignaciones a arrays indexados no
requieren los corchetes ni el índice. Cuando se asigna a arrays indexados, si se suministra el índice
opcional, el valor es asignado a ese índice; en caso contrario el elemento es asignado al último índice
asignado por la sentencia más uno. Los índices comienzan en el cero.
Cuando se asigna a un array asociativo, el índice es obligatorio.
Esta sintaxis también se puede usar con el comando interno declare. Los elementos individuales
del array pueden ser asignados usando la sintaxis nombre[índice]=valor introducida
anteriormente.
Cualquier elemento de un array puede ser referenciado usando ${nombre[índice]} . Las llaves son
obligatorias para evitar conflictos con los operadores de expansión de nombres de fichero de la shell.
Si el índice es '@' o '*' la palabra se expande a todos los miembros del array nombre. Estos índices se
diferencian sólo cuando la palabra aparece entre dobles comillas. Si la palabra está entre dobles
comillas, ${nombre[*]} se expande a una única palabra con el valor de cada miembro del array
separado por el primer carácter de la variable IFS , y ${nombre[@]} se expande a cada elemento de
nombre en una palabra separada. Cuando no hay miembros en el array ${nombre[@]} no se expande a
Página 87
Capítulo 6: Características de Bash
nada. Si la expansión entre dobles comillas ocurre dentro de una palabra, la expansión del primer
parámetro se une con la primera parte de la palabra original, y la expansión del último parámetro se
une con la última parte de la palabra original. Esto es similar a la expansión de los parámetros
especiales '@' y '*'. ${#nombre[índice]} se expande a la longitud de ${nombre[índice]}. Si el índice
es '@' o '*', la expansión es el número de elementos en el array. Referenciar una variable de tipo array
sin un índice es equivalente a referenciar al índice 0.
Se considera que una variable de tipo array está establecida si alguno de los índices tiene asignado
un valor. La cadena nula es un valor válido.
Se utiliza el comando interno unset para destruir arrays, unset nombre[índice] elimina el
elemento en el índice dado por índice. Tenga cuidado de evitar efectos no deseados causados por la
expansión de nombres de fichero, unset nombre, donde nombre es un array, elimina el array
completo. Un índice de '@' o '*' también elimina el array completo.
Cada uno de los comandos internos declare, local y readonly aceptan una opción '-a' para
especificar un array indexado y una opción ' -A' para especificar un array asociativo. El comando
interno read acepta una opción '-a' para asignar una lista de palabras leídas desde la entrada estándar
a un array, y puede leer valores desde la entrada estándar dentro de elementos individuales del array.
Los comandos internos set y declare muestran los valores del array de forma que pueden ser
reutilizados como entrada.
Página 88
Capítulo 6: Características de Bash
popd
popd [+N | -N] [-n]
Elimina la entrada de la cima de la pila de directorios, y realiza un cd al nuevo directorio
de dicha cima. Cuando no se dan argumentos, popd elimina el directorio de la cima de la
pila y realiza un cd al nuevo directorio de la cima de la pila. Los elementos se numeran
desde 0 comenzando en el primer directorio listado con dirs; por ejemplo, popd es
equivalente a popd +0.
+N Elimina el n-ésimo directorio (contando desde la izquierda de la lista
imprimida por dirs), comenzando con cero.
-N Elimina el n-ésimo directorio (contando desde la derecha de la lista
imprimida por dirs), comenzando con cero.
-n Suprime el cambio de directorio habitual cuando se remueven directorios
desde la pila, de forma que sólo se manipula la pila.
pushd
pushd [-n] [+N | -N | dir ]
Guarda el directorio actual en la cima de la pila de directorios y realiza un cd a dicho
directorio. Sin argumentos, pushd intercambia los dos directorios de la cima.
-n Suprime el cambio de directorio habitual cuando se añaden directorios a la
pila, de forma que sólo se manipula la pila.
+N Lleva al n-ésimo directorio (contando desde la izquierda de la lista impri-
mida por dirs, comenzando con cero) a la cima de la lista rotando la pila.
-N Lleva el n-ésimo directorio (contando desde la derecha de la lista imprimida
por dirs, comenzando con cero) a la cima de la lista rotando la pila.
dir Hace que el directorio de trabajo actual sea la cima de la pila, y luego ejecuta
el equivaflente a 'cd dir'. Cambia el directorio de trabajo actual a dir.
Página 89
Capítulo 6: Características de Bash
\H El nombre de anfitrión.
\j El número de tareas manejadas actualmente por la shell.
\l El nombre base de del dispositivo terminal de la shell.
\n Una nueva línea.
\r Un retorno del carro.
\s El nombre de la shell, el nombre base de $0 (la parte que sigue a la última barra
inclinada).
\t La hora, en formato de 24 horas HH:MM:SS.
\T La hora, en formato de 12 horas HH:MM:SS.
\@ La hora, en formato de 12 horas am/pm.
\A La hora, en formato de 24 horas HH:MM.
\u El nombre de usuario del usuario actual.
\v La versión de Bash (por ejemplo, 2.00)
\V La distribución de Bash, la versión + el nivel de parcheo (por ejemplo 2.00.0).
\w El directorio de trabajo actual, con $HOME abreviado con una tilde (utiliza la variable
$PROMPT_DIRTIRM ).
\W El nombre base de $PWD , con $HOME abreviado con una tilde.
\! El número de historia de este comando.
\# El número de comando de este comando.
\$ Si el uid efectivo es 0, # , en caso contrario $.
\nnn El carácter cuyo código ASCII coincide con el valor octal nnn.
\\ Una barra invertida.
\[ Comienza una secuencia de caracteres no imprimibles. Esto puede usarse para introducir
una secuencia de control del terminal dentro del prompt.
\] Finaliza una secuencia de caracteres no imprimibles.
El número de comando y el número de historia normalmente son diferentes: el número de
historia de un comando es su posición en la lista de historia, la cual puede incluir comandos restau-
rados desde el archivo de historia (vea la Sección 9.1 [Características de Historia de Bash]), mientras
que el número de comando es la posición en la secuencia de comandos ejecutados durante la sesión de
shell actual.
Después de que la cadena sea decodificada, esta se expande mediante expansión de parámetros,
sustitución de comandos, expansión aritmética y eliminación de entrecomillado obedeciendo al valor
de la opción de shell promptvars (vea la Sección 4.2 [Comandos Internos de Bash]).
Página 90
Capítulo 6: Características de Bash
bash exceptuando los apartados siguientes que están anulados o no son interpretados:
• Cambiar de directorio con el comando interno cd.
• Establecer o quitar los valores de las variables SHELL , PATH, ENV, o BASH_ENV .
• Especificar nombres de comandos que contengan barras inclinadas.
• Especificar un nombre de fichero que contenga una barra inclinada como argumento para el
comando interno '.'.
• Especificar un nombre de fichero que contenga una barra inclinada como argumento para la
opción '-p' del comando interno hash.
• Importar definiciones de funciones al inicio desde el entorno de la shell.
• Analizar el valor de SHELLOPTS al inicio desde el entorno de la shell.
• Redirigir la salida usando los operadores de redirección '>', '>|', '<>', '>&', '&>' y '>>'.
• Usar el comando interno exec para reemplazar la shell con algún otro comando.
• Añadir o eliminar comandos internos con las opciones ' -f' y '-d' del comando interno
enable.
• Usar el comando interno enable para activar los comandos internos de shell deshabilitados.
• Especificar la opción '-p' para el comando interno command.
• Desactivar el modo restringido con 'set +r' o 'set +o restricted'
Estas restricciones se imponen después de leer cualquier archivo de inicio.
Cuando se ejecuta un comando que es un guión de shell (vea la Sección 3.8 [Guiones de Shell]),
rbash desactiva cualquier restricción en la shell que se origina para ejecutar el guión.
Página 91
Capítulo 6: Características de Bash
Página 92
Capítulo 6: Características de Bash
Página 93
Capítulo 6: Características de Bash
[Características Opcionales])
Página 94
Capítulo 7: Control de tareas
Página 95
Capítulo 7: Control de tareas
usando una subcadena que aparezca en su línea de comandos. Por ejemplo, ' %ce ' se refiere a una tarea
ce detenida. En cambio '%?ce' se refiere a cualquier tarea que contenga la cadena ' ce' en su línea de
comandos. Si el prefijo o la subcadena concuerda con más de una tarea, Bash informará de un error.
Para llevar una tarea a primer plano puede bastar simplemente con nombrar a dicha tarea: '%1'
es un sinónimo para 'fg %1', llevando la tarea 1 desde un segundo plano hasta el primer plano. De
forma similar, '%1 &' continúa la tarea 1 en segundo plano, lo que equivale a 'bg %1'.
La shell aprende inmediatamente cuando una tarea cambia de estado. Normalmente Bash espera
hasta que está a punto de escribir un prompt para informar de cambios en el estado de una tarea de
forma que no interrumpe ninguna otra salida. Si está activada la opción ' -b' del comando interno set,
Bash informa de tales cambios inmediatamente (vea la Sección 4.3.1 [El Comando Interno Set]).
Cualquier trampa en SIGHLD se ejecuta para cada proceso hijo que exista.
Si se intenta salir de Bash mientras que una tarea está suspendida (o ejecutándose, si la opción
checkjobs está activada (vea la Sección 4.3.2 [El Comando Interno Shopt]), la shell imprime un
mensaje de advertencia, y, si la opción checkjobs está activada, lista las tareas y sus estados. Los
comandos de tarea se pueden usar para inspeccionar su estado. Si se realiza un segundo intento de
salida sin que intervenga ningún comando, Bash no imprimirá más advertencias, y cualquier tarea
suspendida será finalizada.
Página 96
Capítulo 7: Control de tareas
Página 97
Capítulo 7: Control de tareas
permiten ambigüedades; si hay más de una tarea que comience con la cadena introducida,
entonces se seleccionará la tarea a la que se accedió más recientemente. El nombre de una
tarea detenida, en este contexto, es la línea de comandos usada para iniciarla. Si esta
variable se establece al valor 'exact' la cadena suministrada debe concordar exactamente
con el nombre de una tarea detenida; si es establecida a ' substring', la cadena suministrada
necesita encajar en una subcadena del nombre de una tarea detenida. El valor ' substring'
proporciona una funcionalidad análoga a la ID de tarea ' %? ' (vea la Sección 7.1
[Fundamentos del Control de Tareas]). Si se establece a algún otro valor, la cadena
suministrada debe ser un prefijo del nombre de una tarea detenida; esto proporciona una
funcionalidad análoga al ID de tarea '% '.
Página 98
Capítulo 8: Edición de la línea de comandos
Página 99
Capítulo 8: Edición de la línea de comandos
Página 100
Capítulo 8: Edición de la línea de comandos
mientras que las teclas rápidas con Meta trabajan con palabras.
8.2.3.- Comandos para cortar texto de Readline
Cortar texto significa borrar el texto de la línea, pero guardarlo para uso posterior, normalmente
volviendo a reinsertar este texto en otro lugar de la línea.
Si la descripción de un comando dice que este corta texto, entonces puede estar seguro de que
posteriormente puede obtener ese texto en un lugar diferente (o en el mismo).
Cuando utilice un comando de corte, el texto es guardado en un anillo de corte (kill-ring).
Cualquier número de cortes consecutivos guardan todo el texto cortado junto, de forma que cuando
pegue este de nuevo, obtenga todo el texto. El anillo de corte no es específico de la línea; el texto que
corta en una línea introducida previamente está disponible para ser pegado nuevamente más tarde,
cuando esté introduciendo cualquier otra línea.
A continuación le damos una lista de los comandos para cortar texto.
C-k Corta el texto desde la posición actual del cursor hasta el final de la línea.
M-d Corta el texto desde el cursor hasta el final de la palabra actual, o, si se encuentra
entre palabras, hasta el final de la próxima palabra. Los límites de palabra son los
mismos que los usados por M-f
M-DEL Corta desde el cursor hasta el comienzo de la palabra actual, o, si se encuentra entre
palabras, al comienzo de la palabra previa. Los límites de palabras son los mismos
que los usados con M-b.
C-w Corta desde el cursor hasta el espacio en blanco previo. Este se diferencia de M-DEL
en que los límites de palabra son diferentes.
A continuación indicamos cómo se pega nuevamente el texto en la línea. Pegar significa copiar el
texto más recientemente cortado desde el buffer de corte.
C-y Pega el texto más recientemente cortado nuevamente en la posición del cursor.
M-y Rota el anillo de cortes, y pega el nuevo contenido de la cima. Únicamente puede
hacer esto si el comando anterior es C-y o M-y.
Página 101
Capítulo 8: Edición de la línea de comandos
Página 102
Capítulo 8: Edición de la línea de comandos
Página 103
Capítulo 8: Edición de la línea de comandos
Página 104
Capítulo 8: Edición de la línea de comandos
terminal afirme que puede soportar. El valor por defecto es ' off'. El nombre
meta-flag es un sinónimo para esta variable.
isearch-terminators
La cadena de caracteres que debería terminar una búsqueda incremental sin
ejecutar posteriormente el carácter como un comando (vea la Sección 8.2.5
[Busquedas]). Si esta variable no tiene un valor asignado, los caracteres ESC y
C-J terminarán la búsqueda incremental.
keymap
Establece la idea de Readline del mapa de teclas actual para los comandos de
asociación de teclas. Los nombres aceptables para keymap son emacs, emacs-
standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command y vi-insert. vi es
equivalente a vi-command; emacs es equivalente a emacs-standard. El valor
por defecto es emacs. El valor de la variable editing- mode también afecta al
mapa de teclas por defecto.
mark-directories
Si está establecida a 'on', los nombres de directorio completados terminarán
con una barra inclinada. El valor por defecto es 'on'.
mark-modified-lines
Esta variable, cuando está establecida en ' on', produce que Readline muestre
un asterisco ('*') al comienzo de las líneas de historia que hayan sido
modificadas. Esta variable está en 'off' por defecto.
mark-symlinked-directories
Si está establecida a 'on', los nombres completados que son enlaces simbólicos
a directorios presentan una barra invertida añadida al final (obedeciendo al
valor de mark-directories ). El valor por defecto es 'off'
match-hidden-files
Esta variable, cuando está establecida en 'on', produce que Readline encuentre
ficheros cuyos nombres comiencen con un '.' (ficheros ocultos) cuando realiza
un completado de nombres de fichero. Si su valor es 'off' no mostrará los
archivos ocultos a menos que el usuario suministre el '.' inicial en el nombre
de archivo a completar. Esta variable está en 'on' por defecto.
output-meta
Si está establecida a 'on', Readline mostrará directamente los caracteres con el
octavo bit establecido, en vez de como una secuencia de escape meta-
prefijada. El valor por defecto es 'off'.
page-completions
Si está establecida en 'on', Readline utiliza un paginador interno tipo more
para mostrar una pantalla completa de posibles completados a la vez. Esta
variable está en 'on' por defecto.
print-completions-horizontally
Si está establecida en 'on', Readline mostrará los completados que concuerdan
ordenados horizontalmente en orden alfabético, en vez de descender por la
pantalla. El valor por defecto es 'off'.
Página 105
Capítulo 8: Edición de la línea de comandos
revert-all-at-newline
Si está establecida en 'on', Readline deshará todos los cambios en las líneas de
historia antes de retornar cuando se ejecute accept-line (aceptar línea). Por
defecto, las líneas de historia se pueden modificar y mantienen listas de
deshacer individuales mediante llamadas a readline. El valor por defecto es
'off'.
show-all-if-ambiguous
Esta variable altera el comportamiento por defecto de las funciones de
completado. Si está establecida a 'on' las palabras que tienen más de un
completado posible producirán que las concordancias sean listadas
inmediatamente en vez de hacer sonar la campana. El valor por defecto es
'off'.
show-all-if-unmodified
Esto altera el comportamiento por defecto de las funciones de completado de
modo similar a show-all-if-ambiguous . Si está establecida en 'on', las palabras
que tengan más de un completado posible sin ningún completado parcial
posible (los completados posibles no comparten un prefijo común) producen
que las concordancias sean listadas inmediatamente en vez de hacer sonar la
campana. El valor por defecto es 'off'.
skip-completed-text
Si está establecida en 'on' modifica el comportamiento de completado por
defecto cuando se inserta una única concordancia dentro de la línea. Este
efecto sólo está activo cuando se realiza el completado en medio de una
palabra. Si está activada, readline no inserta caracteres desde el completado
que concuerden con los caracteres a partir de la posición actual en la palabra
que está siendo completada. Por ejemplo, si está activado, intentar el
completado cuando el cursor está tras la 'e' en 'Makefile' resultará en
'Makefile' en vez de en 'Makefilefile', asumiendo que hay un único
completado posible. El valor por defecto es 'off'.
visible-stats
Si está establecida en 'on', cuando se listan los completados posibles para un
nombre de fichero se añade un carácter al final que indica el tipo de fichero. El
valor por defecto es 'off'.
Asociaciones de teclas
La sintaxis para controlar de teclas en el archivo de inicialización es simple. Primero
necesita encontrar el nombre del comando que desea cambiar. La sección siguiente
contiene tablas con los nombres de comando, las teclas rápidas que tiene asociadas por
defecto, si las hay, y una descripción corta de qué hace el comando.
Una vez que conozca el nombre del comando, simplemente sitúe en una línea del archivo
de inicialización el nombre de la tecla que desea enlazar con el comando, un dos puntos
':', y luego el nombre del comando. No puede haber espacios entre el nombre de la tecla y
el dos puntos – esto se interpretará como parte del nombre de la tecla. El nombre de la
tecla puede expresarse de diferentes formas, en función de lo que le resulte más cómodo.
Readline permite que las teclas se enlacen, además de a los nombres de comando, a
cadenas que son insertadas cuando se presiona una tecla (una macro).
Página 106
Capítulo 8: Edición de la línea de comandos
Página 107
Capítulo 8: Edición de la línea de comandos
\f
\n nueva línea.
\r retorno de carro.
\t tabulación horizontal.
\v tabulación vertical.
\nnn El carácter de ocho bits cuyo valor es el valor octal nnn (de uno a tres
dígitos).
\xHH El carácter de ocho bits cuyo valor es el valor hexadecimal HH (uno o dos
dígitos hexadecimales).
Cuando se introduce el texto de una macro, se debe usar comillas dobles o simples para
indicar una definición de macro. El texto sin entrecomillar se considera un nombre de
función. En el cuerpo de una macro se expanden las cadenas escapadas con barra invertida
que se indican más arriba. La barra invertida entrecomillará cualquier otro carácter en el
texto de la macro, incluyendo '”' y '''. Por ejemplo, el siguiente enlace hará que 'C-x \'
inserte una simple '\' en la línea:
“\C-x\\”: “\\”
Página 108
Capítulo 8: Edición de la línea de comandos
#
# Set various bindings for emacs mode.
$if mode=emacs
Página 109
Capítulo 8: Edición de la línea de comandos
"\M-[D": backward-char
"\M-[C": forward-char
"\M-[A": previous-history
"\M-[B": next-history
#
# Arrow keys in 8 bit keypad mode
#
#"\M-\C-OD": backward-char
#"\M-\C-OC": forward-char
#"\M-\C-OA": previous-history
#"\M-\C-OB": next-history
#
# Arrow keys in 8 bit ANSI mode
#
#"\M-\C-[D": backward-char
#"\M-\C-[C": forward-char
#"\M-\C-[A": previous-history
#"\M-\C-[B": next-history
C-q: quoted-insert
$endif
Página 110
Capítulo 8: Edición de la línea de comandos
# For FTP
$if Ftp
"\C-xg": "get \M-?"
"\C-xt": "put \M-?"
"\M-.": yank-last-arg
$endif
Página 111
Capítulo 8: Edición de la línea de comandos
shell-backward-word ()
Retrocede hasta el comienzo de la palabra actual o la palabra previa. Las palabras están
delimitadas por metacaracteres de la shell no entrecomillados.
clear-screen (C-l)
Limpia la pantalla y redibuja la línea actual en la parte alta de la pantalla.
redraw-current-line ()
Refresca la línea actual. Por defecto no está asociado a ninguna tecla.
Página 112
Capítulo 8: Edición de la línea de comandos
yank-nth-arg (M-C-y)
Inserta el primer argumento al comando previo (normalmente la segunda palabra de la
línea previa) en el punto. Con un argumento n, inserta la palabra n-ésima desde el
comando previo (las palabras en el comando previo comienzan con una palabra 0). Un
argumento negativo inserta la palabra n-ésima desde el final del comando previo. Una vez
que se computa el argumento n, este argumento es extraído como si se hubiese
especificado el comando de expansión de historia '!n'.
yank-last-arg (M-. o M-_)
Inserta el último argumento del comando previo (la última palabra de la entrada anterior
de la historia). Con un argumento, se comporta exactamente como yank-nth-arg.
Llamadas sucesivas a yank-last-arg retrocederán a través de la lista de historia, insertando
el último argumento de cada línea sucesivamente. Se utilizan las características de
expansión de la historia para extraer el último argumento, como si se hubiese especificado
el comando de expansión de la historia '!$'.
Página 113
Capítulo 8: Edición de la línea de comandos
downcase-word (M-l)
Cambia a minúsculas la palabra actual (o la siguiente). Con un argumento negativo,
cambia a minúsculas la palabra anterior, pero no mueve el cursor.
capitalize-word (M-c)
Capitaliza la palabra actual (o la siguiente). Con un argumento negativo, capitaliza la
palabra anterior, pero no mueve el cursor.
overwrite-mode ()
Conmuta el modo de sobreescritura. Con un argumento explícito de valor numérico
positivo, cambia al modo de sobreescritura. Con un argumento explícito de valor numérico
negativo, cambia al modo de inserción. Este comando afecta sólo al modo emacs; el modo
vi sobreescribe de forma diferente. Cada llamada a readline() se inicia en el modo de
inserción.
En modo de sobreescritura, los caracteres enlazados a self-insert reemplazan el texto en el
punto en vez de empujar el texto hacia la derecha. Los caracteres que enlazan con
backward-delete-char reemplazan el carácter anterior al punto con un espacio.
Por defecto, este comando no está asociado a ninguna tecla.
Página 114
Capítulo 8: Edición de la línea de comandos
Corta la palabra anterior al punto, usando el carácter espacio en blanco como limitador de
palabra. El texto cortado se guarda en el anillo de corte.
unix-filename-rubout ()
Corta la palabra anterior al punto, usando los caracteres espacio en blanco y barra
inclinada como limitadores de palabra. El texto cortado se guarda en el anillo de corte.
delete-horizontal-space ()
Borra todos los espacios y tabuladores alrededor del punto. Por defecto no está asociado a
ninguna tecla.
kill-region ()
Corta el texto en la región actual. Por defecto este comando no está asociado a ninguna
tecla.
copy-region-as-kill ()
Copia el texto en la región a la memoria intermedia (buffer) de corte, de forma que puede
ser pegado en seguida. Por defecto, este comando no está asociado a ninguna tecla.
copy-backward-word ()
Copia la palabra anterior al punto a la memoria intermedia de corte. Los límites de corte
son los mismos que en backward-word. Por defecto, este comando no está asociado a
ninguna tecla.
copy-forward-word ()
Copia la palabra que sigue al punto a la memoria intermedia de corte. Los límites de
palabra son los mismos que en forward-word. Por defecto, este comando no está asociado
a ninguna tecla.
yank (C-y)
Pega la cima del anillo de corte dentro de la memoria intermedia en la posición del punto.
yank-pop (M-y)
Gira el anillo de corte, y pega la nueva cima. Sólo se puede hacer esto si el comando
anterior es yank o yank-pop.
Página 115
Capítulo 8: Edición de la línea de comandos
Página 116
Capítulo 8: Edición de la línea de comandos
shell.
complete-hostname (M-@)
Intenta el completado del texto anterior al punto, tratándolo como un nombre de anfitrión
(host).
possible-hostname-completions (C-x @)
Lista los completados posibles para el texto anterior al punto, tratándolo como un nombre
de anfitrión.
complete-command (M-!)
Intenta el completado del texto anterior al punto, tratándolo como un nombre de
comando. El completado de comandos intenta concordar el texto contra alias, palabras
reservadas, funciones de shell, comandos internos de la shell, y finalmente, nombres de
ficheros ejecutables, en ese orden.
possible-command-completions (C-x !)
Lista los completados posibles del texto anterior al punto, tratándolo como un nombre de
comando.
dynamic-complete-history (M-TAB)
Intenta completar el texto anterior al punto comparando dicho texto con las líneas de la
lista de historia para encontrar posibles completados.
dabbrev-expand ()
Intenta el completado de menú en el texto anterior al punto comparando el texto con las
líneas de historia para encontrar posibles completados.
complete-into-braces (M-{)
Realiza el completado de nombre de fichero e inserta la lista de completados posibles
encerrada entre llaves de forma que esté disponible para la shell (vea la Sección 3.5.1
[Expansión de Llaves]).
Página 117
Capítulo 8: Edición de la línea de comandos
abort (C-g)
Cancela el comando de edición actual y hace sonar la campana (obedeciendo a la variable
bell-style ).
do-uppercase-version (M-a, M-b, M-x, …)
Si el carácter x en M-x está en minúsculas ejecuta el comando enlazado con el carácter
mayúsculas correspondiente.
prefix-meta (ESC)
Prefija con Meta el siguiente carácter introducido. Es útil en teclados que no poseen una
tecla meta. Introducir 'ESC f' es equivalente a introducir M-f.
undo (C-_ o C-x C-u)
Deshace de forma incremental, recordado aisladamente para cada línea.
revert-line (M-r)
Deshace todos los cambios realizados en esta línea. Esto es cómo ejecutar el comando
undo las veces suficientes para volver al principio.
tilde-expand (M-&)
Realiza la expansión de tilde en la palabra actual.
set-mark (C-@)
Establece la marca en el punto. Si se suministra un argumento numérico la marca se
establece en esa posición.
exchange-point-and-mark (C-x C-x)
Intercambia el punto con la marca. La posición actual del cursor se establece en la
posición guardada, y la posición del cursor se guarda como la marca.
character-search (C-])
Se lee un carácter y se mueve el punto a la siguiente ocurrencia de ese carácter. Una
cuenta negativa busca ocurrencias previas.
character-search-backward (M-C-])
Se lee un carácter y se mueve el punto a la ocurrencia previa de ese carácter. Una cuenta
negativa busca ocurrencias siguientes.
skip-csi-sequence ()
Lee los caracteres suficientes para consumir una secuencia de teclas múltiple como las
definidas para teclas como Home y End. Estas secuencias comienzan con un Indicador de
Control de Secuencia (CSI), normalmente ESC-[. Si esta secuencia está enlazada a “\e[”,
las teclas que producen tales secuencias no tendrán efecto a menos que se enlace
explícitamente a un comando de Readline, en vez de insertar caracteres en la memoria
intermedia de edición. Por defecto no está asociado, pero normalmente se asocia con
ESC-[.
insert-comment (M-#)
Sin argumento numérico el valor de la variable comment-begin se inserta al principio de
la línea actual. Si se suministra un valor numérico este comando actúa como un
interruptor; si los caracteres del principio de la línea no concuerdan con el valor de
comment- begin se inserta su valor, en caso contrario se borran los caracteres contenidos
en comment- begin del comienzo de la línea. En cualquier caso, se acepta la línea como si
Página 118
Capítulo 8: Edición de la línea de comandos
se hubiese introducido un carácter nueva línea. El valor por defecto de comment- begin
produce que este comando convierta la línea actual en un comentario de la shell. Si un
argumento numérico provoca que se elimine el carácter de comentario la línea será
ejecutada por la shell.
dump-functions ()
Imprime todas las funciones y sus asociaciones de teclas en el flujo de salida de Readline.
Si se suministra un valor numérico, la salida se formatea de forma que pueda formar parte
de un fichero inputrc. Por defecto este comando no está asociado a ninguna tecla.
dump-variables ()
Imprime todas las variables modificables y sus valores en el flujo de salida de Readline. Si
se suministra un argumento numérico la salida se formatea de forma que pueda formar
parte de un fichero inputrc. Por defecto este comando no está asociado a ninguna tecla.
dump-macros ()
Imprime todas las secuencias de teclas de Readline enlazadas a macros y las cadenas de
salida que les corresponden. Si se suministra un argumento numérico la salida se formatea
de forma que pueda formar parte de un fichero inputrc. Por defecto este comando no está
asociado a ninguna tecla.
glob-complete-word (M-g)
La palabra anterior al punto se trata como un patrón para expansión de rutas, con un
asterisco añadido implícitamente al final. Este patrón se utiliza para generar una lista de
nombres concordantes para formar posibles completados.
glob-expand-word (C-x *)
La palabra anterior al punto se trata como un patrón para expansión de rutas y la lista de
nombres concordantes se inserta, reemplazando a dicha palabra. Si se suministra un
argumento numérico, se añade un '*' al final de la palabra antes de realizar la expansión de
rutas.
glob-list-expansions (C-x g)
Se muestra la lista de expansiones que se podrían generar por glob-expand-word, y se
redibuja la línea. Si se suministra un argumento numérico, se añade un ' *' al final de la
palabra antes de realizar la expansión de rutas.
display-shell-version (C-x C-v)
Muestra información de versión de la instancia actual de Bash.
shell-expand-line (M-C-e)
Expande la línea como lo hace la shell. Este comando realiza expansión de alias y de
historia así como todas las expansiones de palabra de la shell (vea la Sección 3.5
[Expansiones de la Shell]).
history-expand-line (M-^)
Realiza la expansión de historia en la línea actual.
magic-space ()
Realiza expansión de la historia en la línea actual e inserta un espacio (vea la Sección 9.3
[Interaccionando con la Historia]).
Página 119
Capítulo 8: Edición de la línea de comandos
alias-expand-line ()
Realiza expansión de alias en la línea actual (vea la Sección 6.6 [Alias]).
historiy-and-alias-expand-line ()
Realiza la expansión de la historia y de alias en la línea actual.
insert-last-argument (M-. o M-_)
Es un sinónimo para yank-last-arg.
operate-and-get-netx (C-o)
Acepta la línea actual para su ejecución y trae la siguiente línea con respecto a la línea
actual de la historia para su edición. Se ignora cualquier argumento suministrado.
edit-and-execute-command (C-xC-e)
Invoca a un editor en la línea de comandos actual y ejecuta el resultado como un comando
de la shell. Bash intenta invocar como editor a $VISUAL , $EDITOR y emacs en ese orden.
Página 120
Capítulo 8: Edición de la línea de comandos
Después se genera cualquier completado especificado para la opción '-G' con un patrón de
expansión de nombres de fichero. Las palabras generadas por el patrón no necesitan concordar con la
palabra que está siendo completada. La variable de shell GLOBIGNORE no se utiliza para filtrar las
concordancias, pero sí la variable FIGNORE.
Después, se considera la cadena especificada como argumento para la opción ' -W'. La cadena
primero se divide usando como delimitadores los caracteres contenidos en la variable especial IFS. Se
respeta el entrecomillado de la shell. Cada palabra se expande a continuación utilizando expansión de
llaves, expansión de tildes, expansión de parámetros y variables, sustitución de comandos y expansión
aritmética como se describió anteriormente (vea la Sección 3.5 [Expansiones de la Shell]). Los
resultados se separan utilizando las reglas descritas con anterioridad (vea la Sección 3.5.7 [Separación
de Palabras]). Los resultados de la expansión son concordancias prefijadas por la palabra que está
siendo completada, y las palabras concordantes se convierten en posibles completados.
Después de generar estas concordancias, se invoca a cualquier función de shell o cualquier
comando especificado con las opciones '-F' y '-C' respectivamente. Cuando se invoca al comando o la
función se asignan valores a las variables COMP_LINE , COMP_POINT , COMP_KEY Y
COMP_TYPE cómo se describió anteriormente (vea la Sección 5.2 [Variables de Bash]). Si se está
invocando una función de shell también se asignan las variables COMP_WORDS y COMP_CWORD .
Cuando se invoca a la función o el comando, el primer argumento es el nombre del comando cuyos
argumentos están siendo completados, el segundo argumento es la palabra que está siendo completada,
y el tercer argumento es la palabra que precede a la palabra que está siendo completada en la línea de
comandos actual. No se realiza ningún filtrado de los completados generados con respecto a la palabra
que está siendo completada.
Primero se invoca cualquier función especificada con '-F'. La función puede utilizar cualquier
característica de la shell, incluyendo los comandos internos compgen y compopt descritos más
abajo (vea la Sección 8.7 [Comandos Internos para el Completado Programable]), para generar las
coincidencias. Esta debe poner los completados posibles en la variable de tipo array COMPREPLY .
Después, se invoca a cualquier comando especificado con la opción ' -C' en un entorno
equivalente a la sustitución de comandos. Esto debería imprimir una lista de completados, uno por
línea, para la salida estándar. Se puede utilizar la barra invertida para escapar una nueva línea si es
necesario.
Después de generar todos los completados posibles, se aplica a la lista cualquier filtro
especificado con la opción '-X'. El filtro es un patrón similar a los usados para la expansión de
rutas;Un símbolo '&' en el patrón es reemplazado con el texto de la palabra que está siendo
completada. Se puede escapar un literal '&' con una barra invertida; la barra invertida se elimina antes
de intentar una coincidencia. Cualquier completado que concuerde con el patrón será eliminado de la
lista. Un '!' marginal invierte el patrón; en este caso cualquier completado que no concuerde con el
patrón será eliminado.
Finalmente, se añadirá a cada miembro de la lista de completados posibles cualquier prefijo y
sufijo especificados con las opciones '-P' y '-S' respectivamente y el resultado es devuelto al código de
completado de Readline como una lista de completados posibles.
Si las acciones aplicadas anteriormente no generan ninguna concordancia, y se suministró la
opción '-o nombreDir' a complete cuando se definió el compspec, se intentará un completado de
nombre de directorio.
Si se suministró la opción '-o plusdirs' a complete cuando se definió el compspec se intentará
el completado de nombres de directorio y cualquier coincidencia será añadida a los resultados de las
otras acciones.
Página 121
Capítulo 8: Edición de la línea de comandos
Por defecto, si se encuentra un compspec lo que este genere es devuelto al código de completado
como el conjunto completo de completados posibles. No se intenta realizar los completados por
defecto de Bash, y el completado por defecto de Readline, el de nombres de fichero, es deshabilitado.
Si se suministró la opción '-o bashdefault' a complete cuando se definió el compspec, se intentará
realizar los completados por defecto de Bash si el compspec no genera ninguna coincidencia. Si se
suministró la opción '-o default' a complete cuando se definió el compspec, se realizará el
completado por defecto de Readline si el compspec (y, si se intentan, los completados por defecto de
Bash) no genera ninguna coincidencia.
Cuando un compspec indica que desea un completado de nombres de directorio, las funciones de
completado programable fuerzan a Readline a añadir una barra inclinada al final para completar los
nombres que son enlaces simbólicos a directorios, obedeciendo al valor de la variable de Readline
mark-directories .
Hay soporte para modificar dinámicamente los completados. Esto es más útil cuando se utiliza en
combinación con un completado por defecto especificado con ' -D'. Esto es posible para funciones de
shell ejecutadas como manejadores de completado para indicar que se debería reintentar el
completado devolviendo un estado de salida de 124. Si la función de shell devuelve 124, y cambia el
compspec asociado con el comando en el que se está intentando el completado (suministrado como el
primer argumento cuando se ejecuta la función), el completado programable reinicia desde el
principio, con un intento de encontrar un compspec para ese comando. Esto permite construir un
juego de completados dinámicamente cuando se intenta el completado, en vez de ser cargados todos a
la vez.
Por ejemplo, asumiendo que hay una librería de compspecs, cada uno mantenido en un fichero
correspondiente al nombre del comando, la siguiente función de completado por defecto cargará los
completados dinámicamente:
_completion_loader()
{
. "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
}
complete -D -F _completion_loader
Página 122
Capítulo 8: Edición de la línea de comandos
complete
complete [-abcdefgjksuv] [-o comp-option] [-DE] [-A acción]
[-G patglob] [-W listPalabras] [-F funcion] [-C comando]
[-X patfiltro] [-P prefijo] [-S sufijo] nombre
[nombre ...]
complete -pr [-DE] [nombre ...]
Especifica como deben completarse los argumentos de cada nombre. Si se suministra la
opción '-p', o si no se suministra ninguna opción, se imprimen las especificaciones de
completado de forma que permita reutilizarlas como entrada. La opción ' -r' elimina una
especificación de completado para cada uno de los nombres o todas las especificaciones si
no se proporciona ningún nombre. La opción '-D' indica que las opciones y acciones
restantes deberían aplicarse al comando de completado “default”; Esto es, se intentará el
completado en un comando para el que no se haya definido previamente ningún
completado. La opción '-E' indica que las opciones y acciones restantes deberían aplicarse
a comando de completado “empty”; esto es, se intentará el completado en una línea en
blanco.
El proceso de aplicar estas especificaciones de completado cuando se intenta el
completado de palabra se describe más arriba (vea la Sección 8.6 [Completado
Programable]). La opción '-D' tiene preferencia sobre la '-E'.
Si se especifican otras opciones estas tienen los siguientes significados. Los argumentos
para las opciones '-G', '-W' y '-X' (y, si son necesarias, las opciones '-P' y '-S') deben ser
entrecomillados para protegerlos de la expansión antes de que se invoque al comando
interno complete.
-o opción-comp
La opción-comp controla varios aspectos del comportamiento de la compspec
antes de la generación de completados. opción-comp puede ser una de las
siguientes:
bashdefault
Realiza el resto de los completados por defecto de Bash si el
compspec no genera ninguna coincidencia.
default Usa el completado de nombres de fichero por defecto de
Readline si el compspec no genera ninguna coincidencia.
dirnames Realiza el completado de nombres de directoria si el compspec
no genera ninguna coincidencia.
filenames
Indica a Readline que el compspec genere nombres de fichero,
de forma que este puede realizar cualquier procesado específico
de estos nombres (como añadir una barra inclinada a los
nombres de directorio con caracteres especiales entrecomillados,
o suprimir los espacios en blanco marginales.
nospace Le dice a Readline que no añada un espacio al final (lo que hace
por defecto) a las palabras completadas al final de la línea.
plusdirs Después de que se genere cualquier coincidencia definida por
compspec se intenta un completado de nombres de directorio y
Página 123
Capítulo 8: Edición de la línea de comandos
Página 124
Capítulo 8: Edición de la línea de comandos
Página 125
Capítulo 8: Edición de la línea de comandos
se dan opciones, muestra las opciones de completado para cada nombre o para el
completado actual. Los valores posibles para opción son los válidos para el comando
interno complete descrito más arriba. La opción '-D' indica que las opciones restantes
deben aplicarse al comando de completado “default”; esto es, se intenta el completado de
un comando para el cual no se ha definido previamente ningún completado. La opción '-E'
indica que las opciones restantes deben aplicarse al comando de completado “empty”; esto
es, se intenta el completado en una línea en blanco.
La opción '-D' tiene preferencia sobre la '-E'.
El valor devuelto es true a menos que se suministre alguna opción inválida, se intente
modificar las opciones para un nombre para el cual no existe especificación de completado
u ocurra un error en la salida.
Página 126
Capítulo 9: Usando la Historia Interactivamente
Página 127
Capítulo 9: Usando la Historia Interactivamente
fc
fc [-e enombre] [-lnr] [primero] [ultimo]
fc -s [pat=rep] [comando]
Comando fijo. En la primera forma, se selecciona un rango de comandos desde primero a
último desde la lista de historia. Tanto primero como último pueden ser especificados como
una cadena (para localizar el comando más reciente comenzando con esa cadena) o como
un número (un índice en la lista de historia, donde un número negativo se utiliza como un
desplazamiento desde el número de comando actual). Si no se especifica último se le da el
valor de primero. Si no se especifica primero se le da el valor del comando previo en el
caso de edición y -16 en el caso de imprimir listados. Si se le pasa la bandera '-l' se listan
los comandos en la salida estándar. La bandera ' -n' suprime los números de comando
cuando se imprimen listados. La bandera '-r' invierte el orden del listado. En caso
contrario se invoca al editor dado por enombre en un fichero que contenga a estos
comandos. Si no se proporciona enombre, se utiliza el valor de la siguiente expansión de
variables: ${FCEDIT:-${EDITOR:-vi}} . Esto indica que utilice el valor de la variable
FCEDIT , si está establecida, o el valor de la variable EDITOR si está establecida o vi si
ninguna de las variables anteriores está establecida. Cuando se completa la edición, los
comandos son mostrados y ejecutados.
En la segunda forma, se vuelve a ejecutar comando después de que cada instancia de pat
en el comando seleccionado sea reemplazada por rep.
Un alias útil para usar con el comando fc es r='fc -s', de forma que introduciendo 'r
cc' se ejecuta el último comando que comience con cc e introduciendo 'r' se vuelve a
ejecutar el último comando (vea la Sección 6.6 [Alias]).
history
history [n]
history -c
history -d desplazamiento
history [-anrw] [nombrefichero]
history -ps arg
Sin opciones muestra la lista de historia con números de línea. Las líneas precedidas por
'*' han sido modificadas. Un argumento n lista sólo las n últimas líneas. Si la variable de
shell HISTTIMEFORMAT está establecida y no es nula, se utiliza como una cadena de
formato para strftime para mostrar la marca de tiempo asociada con cada entrada
mostrada de la historia. No se imprimen espacios en blanco intermedios entre la marca de
tiempo formateada y la línea de historia.
Las opciones, si se suministran, tienen los siguientes significados:
-c Limpia la lista de historia. Esta opción puede combinarse con otras opciones
para reemplazar completamente la lista de historia.
-d desplazamiento
Borra la entrada de la historia en la posición desplazamiento. El
desplazamiento es el mismo que aparece cuando se muestra la historia.
-a Añade las nuevas líneas de historia (las líneas de historia introducidas desde
el comienzo de la sesión actual de Bash) al final del fichero de historia.
Página 128
Capítulo 9: Usando la Historia Interactivamente
-n Añade las líneas de historia que no han sido leídas aún desde el fichero de
historia a la lista actual de historia. Estas líneas son añadidas al final del
fichero de historia desde el comienzo de la sesión actual de Bash.
-r Lee el archivo actual de historia y añade su contenido al final de la lista de
historia.
-w Vuelca la historia actual al fichero de historia.
-p Realiza sustituciones de historia en los args y muestra el resultado en la
salida estándar sin almacenar los resultados en la lista de historia.
-s Los argumentos se añaden al final de la lista de historia como una entrada
única.
si se proporciona nombrefichero con las opciónes '-w', '-r', '-a' o '-n',, este se utiliza
como archivo de historia. Si no se proporciona nombrefichero se utiliza el valor de la
variable HISTFILE .
Página 129
Capítulo 9: Usando la Historia Interactivamente
Página 130
Capítulo 9: Usando la Historia Interactivamente
Página 131
Capítulo 10: Instalando Bash
Página 132
Capítulo 10: Instalando Bash
Página 133
Capítulo 10: Instalando Bash
campo.
Página 134
Capítulo 10: Instalando Bash
Página 135
Capítulo 10: Instalando Bash
--enable-array-variables
Incluye soporte para variables de shell de tipo array unidimensional (vea la Sección 6.7
[Arrays]).
--enable-bang-history
Incluye soporte para la sustitución de la historia tipo csh (vea la Sección 9.3 [Interaccion
con la Hisotria]).
--enable-brace-expansion
Incluye expansión de llaves tipo csh ( b{a,b}c → bac bbc ). Vea la Sección 3.5.1
[Expansión de Llaves] para una descripción completa.
--enable-casemod-attributes
Incluye soporte para atributos de modificación de mayúsculas y minúsculas en el comando
interno declare y en las sentencias de asignación. Las variables con el atributo uppercase,
por ejemplo, tendrán sus valores convertidos a mayúsculas.
--enable-casemod-expansion
Incluye soporte para expansiones de palabra con modificación de mayúsculas y
minúsculas.
--enable-command-timing
Incluye soporte para reconocer time como una palabra reservada y para mostrar
estadísticas de tiempo para la tubería que sigue a time (vea la Sección 3.2.2 [Tuberías]).
Esto permite que tanto las tuberías como los comandos internos y las funciones sean
cronometrados.
--enable-cond-command
Incluye soporte para el comando condicional [[. (Vea la Sección 3.2.4.2 [Construcciones
Condicionales]).
--enable-cond-regexp
Incluye soporte para encajar expresiones regulares POSIX utilizando el operador binario
'=~' en el comando condicional [[. (vea la Sección 3.2.4.2 [Construcciones
Condicionales]).
--enable-coprocesses
Incluye soporte para coprocesos y la palabra reservada coproc (vea la Sección 3.2.2
[Tuberías]).
--enable-debuger
Incluye soporte para el depurador de Bash (que se distribuye separadamente).
--enable-directory-stack
Incluye soporte para una pila de directorios, y los comandos internos push, popd y dirs
similares a los de csh. (vea la Sección 6.8 [La Pila de Directorios]).
--enable-disabled-builtins
Permite que se invoque a los comandos internos mediante ' builtin xxx' incluso
después de que xxx haya sido desactivado utilizando 'enable -n xxx'. Vea la Sección
4.2 [Comandos Internos de Bash], para obtener más detalles de los comandos internos
builtin y enable.
--enable-dparen-arithmetic
Incluye soporte para el comando (( … )) (vea la Sección 3.2.4.2 [Construcciones
Condicionales]).
Página 136
Capítulo 10: Instalando Bash
--enable-extended-glob
Incluye soporte para las características de ajuste de patrones extendidos descritos
anteriormente bajo la Sección 3.5.8.1 [Concordancia de Patrones]).
--enable-extended-glob-default
Establece el valor por defecto de la opción de shell extglob descrita anteriormente bajo
la sección 4.3.2 [El Comando Interno Builtin] para ser activada.
--enable-help-builtin
Incluye el comando interno help, el cual muestra ayuda sobre los comandos internos y las
variables de la shell (vea la Sección 4.2 [Comandos Internos de Bash]).
--enable-history
Incluye la historia de comandos y los comandos internos fc e history (vea la Sección 9.1
[Características de Historia de Bash]).
--enable-job-control
Esto activa las características de control de tareas (vea el Capítulo 7 [Control de Tareas]),
si el sistema operativo las soporta.
--enable-multibyte
Esto activa el soporte para caracteres multibyte si el sistema operativo proporciona el
soporte necesario.
--enable-net-redirections
Esto activa el manejo especial de nombres de fichero de la forma /dev/tcp/host/port y
/dev/udp/host/port cuando se utiliza en redirecciones (vea la Sección 3.6 [Redirecciones]).
--enable-process-substitution
Esto activa la sustitución de procesos (vea la Sección 3.5.6 [Sustitución de Procesos]) si el
sistema operativo lo soporta.
--enable-progcomp
Activa las características de completado programable (vea la Sección 8.6 [Completado
Programable]). Si Readline no está activado, esta opción no tiene ningún efecto.
--enable-prompt-string-decoding
Activa la interpretación de varios caracteres escapados con barra invertida en las cadenas
de prompt $PS1 , $PS2 , $PS3 y $PS4 . Vea la Sección 6.9 [Imprimiendo un Promp], para
una lista completa de secuencias de escape en cadenas de prompt.
--enable-readline
Incluye soporte para la edición de la línea de comandos y de la historia con la versión de
Bash de la librería Readline (vea el Capítulo 8 [Edición de la Línea de Comandos]).
--enable-restricted
Incluye soporte para una shell restringida. Si esto está activado, Bash, cuando es llamado
con rbash, entra en modo restringido. Vea la Sección 6.10 [La Shell Restringida], para
una descripción del modo restringido.
--enable-separate-helpfiles
Utiliza ficheros externos para la documentación que se muestra con el comando interno
help en vez de almacenar el texto internamente.
--enable-single-help-strings
Almacena el texto mostrado por el comando interno help como una única cadena para
cada tema de la ayuda. Esto ayuda a traducir el texto a diferentes lenguajes. Puede
Página 137
Capítulo 10: Instalando Bash
Página 138
Apéndice A: Informando de errores
Página 139
Apéndice B: Diferencias Principales con la Shell de Bourne
Página 140
Apéndice B: Diferencias Principales con la Shell de Bourne
Página 141
Apéndice B: Diferencias Principales con la Shell de Bourne
Página 142
Apéndice B: Diferencias Principales con la Shell de Bourne
establecidos en un formato que pueda ser utilizado como entrada de la shell, la opción ' -n'
para eliminar varios atributos de variables, y argumentos ' nombre=valor' para establecer
atributos de variable y valores simultáneamente.
• El comando interno hash permite asociar un nombre a un nombre de fichero arbitrario,
incluso cuando ese nombre de fichero no se puede encontrar buscando en $PATH , mediante
'hash -p' (vea la Sección 4.1 [Comandos Internos de la Shell Bourne]).
• Bash incluye un comando interno help para referenciar rápidamente a las características de la
shell (vea la Sección 4.2 [Comandos Internos Bash]).
• Está disponible el comando interno print f para mostrar salida formateada (vea la Sección 4.2
[Comandos Internos de Bash]).
• El comando interno read (vea la Sección 4.2 [Comandos Internos de Bash]) leerá una línea
terminada en '\' con la opción '-r', y usará la variable REPLY por defecto si no se suministran
argumentos de tipo opción. El comando interno read de Bash también tiene opciones
adicionales para controlar la entrada: la opción ' -s' desactivará la impresión (el eco) de los
caracteres introducidos conforme son leídos, la opción '-t' permitirá a read expirar si la
entrada no se produce en un tiempo especificado por un número de segundos, la opción ' -n'
permitirá leer únicamente un número especificado de caracteres en vez de una línea completa,
y la opción '-d' leerá hasta que se introduzca un determinado carácter en vez de una nueva
línea.
• Se puede utilizar el comando interno return para abortar la ejecución de los guiones de
comandos ejecutados con los comandos internos . o source (vea la Sección 4.1 [Comandos
Internos de la Shell Bourne]).
• Bash incluye el comando interno shopt para obtener un control más detallado de las
capacidades opcionales de la shell (vea la Sección 4.3.2 [El Comando Interno Shopt]), y
permite que estas opciones se establezcan o se elimien en la invocación de la shell (vea la
Sección 6.1 [Invocando a Bash]).
• Bash tiene mucho más comportamiento opcional controlable con el comando interno set (vea
la Sección 4.3.1 [El Comando Interno Set]).
• La opción '-x' (xtrace) muestra otros comandos distintos de los comandos simples cuando se
realiza una traza de ejecución (vea la Sección 4.3.1 [El Comando Interno Set]).
• El comando interno test (vea la Sección 4.1 [Comandos Internos de la Shell Bourne]) es
ligeramente diferente al implementado por el algoritmo POSIX, el cual especifica el
comportamiento basado en el número de argumentos.
• Bash incluye el comando interno caller, que muestra el contenido de cualquier llamada a
subrutina activa (una función de shell o un guión ejecutado con los comandos internos . o
source). Esto hace posible al depurador de Bash.
• El comando interno trap (vea la Sección 4.1 [Comandos Internos de la Shell Bourne]),
permite la especificación de una pseudo-señal DEBUG, similar a EXIT. Los comandos
especificados con una trampa DEBUG se ejecutan antes de cualquier comando simple,
comando for, comando case, comando select, cualquier comando for aritmético, y antes del
primer comando ejecutado en una función de shell. Las funciones de shell no heredan la
trampa DEBUG a menos que la función tenga el atributo trace o se haya activado la opción
functrace utilizando el comando interno shopt. La opción de shell extdebug tiene
efectos adicionales en la trampa DEBUG.
El comando interno trap (vea la Sección 4.1 [Comandos Internos de la Shell Bourne])
permite especificar una pseudo-señal ERR, similar a EXIT y DEBUG. Los comandos
Página 143
Apéndice B: Diferencias Principales con la Shell de Bourne
especificados con una trampa ERR se ejecutan después de que un comando simple falle, con
unas pocas excepciones. La trampa ERR no se hereda por las funciones de shell a menos que la
opción -o errtrace del comando interno set esté activada.
El comando interno trap (vea la Sección 4.1 [Comandos Internos de la Shell Bourne]),
permite especificar una pseudo-señal RETURN, similar a EXIT y DEBUG. Los Comandos
especificados con una trampa RETURN se ejecutan antes de que la ejecución continue tras la
función de shell o un script ejecutado con . O source finalice. Las funciones de shell no
heredan la trampa RETURN a menos que se le haya dado a la función el atributo trace o se
haya activado la opción functrace utilizando el comando interno shopt.
• El comando interno type es más amplio y proporciona más información sobre los nombres
que encuentra (vea la Sección 4.2 [Comandos Internos de Bash]).
• El comando interno umask de Bash permite una opción ' -p' que produce que la salida sea
mostrada de forma que esta pueda ser reutilizada como entrada (vea la Sección 4.1
[Comandos Internos de la Shell Bourne]).
• Bash implementa una pila de directorios tipo csh, y proporciona los comandos internos
pushd, popd y dirs para manipularla (vea la Sección 6.8 [La Pila de Directorios]). Bash
también permite ver los elementos de la pila de directorios en los valores de la variable de shell
DIRSTACK .
• Bash interpreta los caracteres especiales escapados mediante una barra invertida en las cadenas
de prompt cuando se encuentra en modo interactivo (vea la Sección 6.9 [Imprimiendo un
Prompt]).
• El modo restringido de Bash es más útil (vea la Sección 6.10 [La Shell Restringida]); el modo
restringido de la shell SVR4.2 está demasiado limitado.
• El comando interno disown puede eliminar una tarea de la tabla de tareas interna de la shell
(vea la Sección 7.2 [Comandos Internos de Control de Tareas]) o suprimir el envío de la señal
SIGHUP a una tarea cuando la shell finaliza como resultado de un SIGHUP.
• Bash incluye varias características para soportar un depurador aislado para los guiones de
comandos de shell.
• La shell SVR4.2 tiene dos comandos internos relacionados con privilegios ( mldmode y priv)
que no están presente en Bash.
• Bash no tiene los comandos internos stop o newgrp.
• Bash no utiliza la variable SHACCT ni realiza estadísticas de la shell.
• El shell SVR4.2 utiliza una variable TIMEOUT similar a la TMOUT utilizada por Bash.
Se pueden encontrar otras características únicas de Bash en el Capítulo 6 [Características de
Bash].
Página 144
Apéndice B: Diferencias Principales con la Shell de Bourne
Página 145
Apéndice C: Licencia de Documentación Libre de GNU (Versión Original)
C.0.- PREAMBLE
The purpose of this License is to make a manual, textbook, or other functional and useful document
free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with
or without modifying it, either commercially or non/commercially. Secondarily, this License preserves
for the author and publisher a way to get credit for their work, while not being considered responsible
for modifications made by others.
This License is a kind of “copyleft”, which means that derivative works of the document must
themselves be free in the same sense. It complements the GNU General Public License, which is a
copyleft license designed for free software.
We have designed this License in order to use it for manuals for free software, because free
software needs free documentation: a free program should come with manuals providing the same
freedoms that the software does. But this License is not limited to software manuals; it can be used for
any textual work, regardless of subject matter or whether it is published as a printed book. We
recommend this License principally for works whose purpose is instruction or reference.
Página 146
Apéndice C: Licencia de Documentación Libre de GNU (Versión Original)
Página 147
Apéndice C: Licencia de Documentación Libre de GNU (Versión Original)
must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover
Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and
legibly identify you as the publisher of these copies. The front cover must present the full title with all
words of the title equally prominent and visible. You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve the title of the Document
and satisfy these conditions, can be treated as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit legibly, you should put the first ones
listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.
If you publish or distribute Opaque copies of the Document numbering more than 100, you must
either include a machine-readable Transparent copy along with each Opaque copy, or state in or with
each Opaque copy a computer-network location from which the general network-using public has
access to download using public-standard network protocols a complete Transparent copy of the
Document, free of added material. If you use the latter option, you must take reasonably prudent
steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy
will remain thus accessible at the stated location until at least one year after the last time you
distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.
It is requested, but not required, that you contact the authors of the Document well before
redistributing any large number of copies, to give them a chance to provide you with an updated
version of the Document.
C.4.- MODIFICATIONS
You may copy and distribute a Modified Version of the Document under the conditions of sections 2
and 3 above, provided that you release the Modified Version under precisely this License, with the
Modified Version filling the role of the Document, thus licensing distribution and modification of the
Modified Version to whoever possesses a copy of it. In addition, you must do these things in the
Modified Version:
• A. Use in the Title Page (and on the covers, if any) a title distinct from that of the
Document, and from those of previous versions (which should, if there were any, be listed in
the History section of the Document). You may use the same title as a previous version if the
original publisher of that version gives permission.
• B. List on the Title Page, as authors, one or more persons or entities responsible for
authorship of the modifications in the Modified Version, together with at least five of the
principal authors of the Document (all of its principal authors, if it has fewer than five), unless
they release you from this requirement.
• C. State on the Title page the name of the publisher of the Modified Version, as the
publisher.
• D. Preserve all the copyright notices of the Document.
• E. Add an appropriate copyright notice for your modifications adjacent to the other
copyright notices.
• F. Include, immediately after the copyright notices, a license notice giving the public
permission to use the Modified Version under the terms of this License, in the form shown in
the Addendum below.
• G. Preserve in that license notice the full lists of Invariant Sections and required Cover
Texts given in the Document’s license notice.
• H. Include an unaltered copy of this License.
• I. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating
Página 148
Apéndice C: Licencia de Documentación Libre de GNU (Versión Original)
at least the title, year, new authors, and publisher of the Modified Version as given on the Title
Page. If there is no section Entitled “History” in the Document, create one stating the title,
year, authors, and publisher of the Document as given on its Title Page, then add an item
describing the Modified Version as stated in the previous sentence.
• J. Preserve the network location, if any, given in the Document for public access to a
Transparent copy of the Document, and likewise the network locations given in the Document
for previous versions it was based on. These may be placed in the “History” section. You may
omit a network location for a work that was published at least four years before the Document
itself, or if the original publisher of the version it refers to gives permission.
• K. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of
the section, and preserve in the section all the substance and tone of each of the ents and/or
dedications given therein.
• L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their
titles. Section numbers or the equivalent are not considered part of the section titles.
• M. Delete any section Entitled “Endorsements”. Such a section may not be included in
the Modified Version.
• N. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title
with any Invariant Section.
• O. Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or appendices that qualify as
Secondary Sections and contain no material copied from the Document, you may at your option
designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant
Sections in the Modified Version’s license notice. These titles must be distinct from any other section
titles.
You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements
of your Modified Version by various parties—for example, statements of peer review or that the text
has been approved by an organization as the authoritative definition of a standard.
You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25
words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one
passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements
made by) any one entity. If the Document already includes a cover text for the same cover, previously
added by you or by arrangement made by the same entity you are acting on behalf of, you may not
add another; but you may replace the old one, on explicit permission from the previous publisher that
added the old one.
The author(s) and publisher(s) of the Document do not by this License give permission to use
their names for publicity for or to assert or imply endorsement of any Modified Version.
Página 149
Apéndice C: Licencia de Documentación Libre de GNU (Versión Original)
parentheses, the name of the original author or publisher of that section if known, or else a unique
number. Make the same adjustment to the section titles in the list of Invariant Sections in the license
notice of the combined work.
In the combination, you must combine any sections Entitled “History” in the various original
documents, forming one section Entitled “History”; likewise combine any sections Entitled
“Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled
“Endorsements.”
C.8.- TRANSLATION
Translation is considered a kind of modification, so you may distribute translations of the Document
under the terms of section 4. Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include translations of some or all Invariant
Sections in addition to the original versions of these Invariant Sections. You may include a translation
of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided
that you also include the original English version of this License and the original versions of those
notices and disclaimers. In case of a disagreement between the translation and the original version of
this License or a notice or disclaimer, the original version will prevail.
If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the
requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.
D.0.1.- TERMINATION
You may not copy, modify, sublicense, or distribute the Document except as expressly provided under
this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will
automatically terminate your rights under this License.
However, if you cease all violation of this License, then your license from a particular copyright
Página 150
Apéndice C: Licencia de Documentación Libre de GNU (Versión Original)
holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally
terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation
by some reasonable means prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is reinstated permanently if the
copyright holder notifies you of the violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that copyright holder, and you cure
the violation prior to 30 days after your receipt of the notice.
Termination of your rights under this section does not terminate the licenses of parties who have
received copies or rights from you under this License. If your rights have been terminated and not
permanently reinstated, receipt of a copy of some or all of the same material does not give you any
rights to use it.
C.10.- RELICENSING
“Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World Wide Web server that
publishes copyrightable works and also provides prominent facilities for anybody to edit those works.
A public wiki that anybody can edit is an example of such a server. A “Massive Multiauthor
Collaboration” (or “MMC”) contained in the site means any set of copyrightable works thus published
on the MMC site.
“CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 license pub- lished by
Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San
Francisco, California, as well as future copyleft versions of that license published by that same
organization.
“Incorporate” means to publish or republish a Document, in whole or in part, as part of another
Document.
An MMC is “eligible for relicensing” if it is licensed under this License, and if all works that
were first published under this License somewhere other than this MMC, and subsequently
incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2)
were thus incorporated prior to November 1, 2008.
The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on
the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.
Página 151
Apéndice C: Licencia de Documentación Libre de GNU (Versión Original)
and put the following copyright and license notices just after the title page:
Copyright (C) year your name.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free
Documentation License, Version 1.3 or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is
included in the section entitled ‘‘GNU Free Documentation License’’.
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with. . .
Texts.” line with this:
with the Invariant Sections being list their titles, with the Front-Cover Texts being list, and with the Back-
Cover Texts being list.
If you have Invariant Sections without Cover Texts, or some other combination of the three,
merge those two alternatives to suit the situation.
If your document contains nontrivial examples of program code, we recommend releasing these
examples in parallel under your choice of free software license, such as the GNU General Public
License, to permit their use in free software.
Página 152
Apéndice D: Licencia de Documentación Libre de GNU
D.0.- PREÁMBULO
El propósito de esta Licencia es permitir que un manual, libro de texto, u otro documento escrito
sea libre en el sentido de libertad: asegurar a todo el mundo la libertad efectiva de copiarlo y
redistribuirlo, con o sin modificaciones, de manera comercial o no. En segundo término, esta Licencia
proporciona al autor y al editor[2] una manera de obtener reconocimiento por su trabajo, sin que se le
considere responsable de las modificaciones realizadas por otros.
Esta Licencia es de tipo copyleft, lo que significa que los trabajos derivados del documento deben
a su vez ser libres en el mismo sentido. Complementa la Licencia Pública General de GNU, que es
una licencia tipo copyleft diseñada para el software libre.
Hemos diseñado esta Licencia para usarla en manuales de software libre, ya que el software libre
necesita documentación libre: un programa libre debe venir con manuales que ofrezcan la mismas
libertades que el software. Pero esta licencia no se limita a manuales de software; puede usarse para
cualquier texto, sin tener en cuenta su temática o si se publica como libro impreso o no.
Recomendamos esta licencia principalmente para trabajos cuyo fin sea instructivo o de referencia.
Página 153
Apéndice D: Licencia de Documentación Libre de GNU
Página 154
Apéndice D: Licencia de Documentación Libre de GNU
D.4.- MODIFICACIONES
Puede copiar y distribuir una Versión Modificada del Documento bajo las condiciones de las
secciones 2 y 3 anteriores, siempre que usted libere la Versión Modificada bajo esta misma Licencia,
con la Versión Modificada haciendo el rol del Documento, por lo tanto dando licencia de distribución
y modificación de la Versión Modificada a quienquiera posea una copia de la misma. Además, debe
hacer lo siguiente en la Versión Modificada:
• A. Usar en la Portada (y en las cubiertas, si hay alguna) un título distinto al del
Documento y de sus versiones anteriores (que deberían, si hay alguna, estar listadas en la
sección de Historia del Documento). Puede usar el mismo título de versiones anteriores al
original siempre y cuando quien las publicó originalmente otorgue permiso.
Página 155
Apéndice D: Licencia de Documentación Libre de GNU
Página 156
Apéndice D: Licencia de Documentación Libre de GNU
hasta 25 palabras como Texto de Cubierta Trasera en la Versión Modificada. Una entidad solo puede
añadir (o hacer que se añada) un pasaje al Texto de Cubierta Delantera y uno al de Cubierta Trasera.
Si el Documento ya incluye un textos de cubiertas añadidos previamente por usted o por la misma
entidad que usted representa, usted no puede añadir otro; pero puede reemplazar el anterior, con
permiso explícito del editor que agregó el texto anterior.
Con esta Licencia ni los autores ni los editores del Documento dan permiso para usar sus
nombres para publicidad ni para asegurar o implicar aprobación de cualquier Versión Modificada.
Página 157
Apéndice D: Licencia de Documentación Libre de GNU
D.8.- TRADUCCIÓN
La Traducción es considerada como un tipo de modificación, por lo que usted puede distribuir
traducciones del Documento bajo los términos de la sección 4. El reemplazo las Secciones Invariantes
con traducciones requiere permiso especial de los dueños de derecho de autor, pero usted puede
añadir traducciones de algunas o todas las Secciones Invariantes a las versiones originales de las
mismas. Puede incluir una traducción de esta Licencia, de todas las notas de licencia del documento,
así como de las Limitaciones de Garantía, siempre que incluya también la versión en Inglés de esta
Licencia y las versiones originales de las notas de licencia y Limitaciones de Garantía. En caso de
desacuerdo entre la traducción y la versión original en Inglés de esta Licencia, la nota de licencia o la
limitación de garantía, la versión original en Inglés prevalecerá.
Si una sección del Documento está Titulada Agradecimientos, Dedicatorias o Historia el requisito
(sección 4) de Conservar su Título (Sección 1) requerirá, típicamente, cambiar su título.
D.9.- TERMINACIÓN
Usted no puede copiar, modificar, sublicenciar o distribuir el Documento salvo por lo permitido
expresamente bajo esta Licencia. Cualquier intento en otra manera de copia, modificación,
sublicenciamiento, o distribución de él es nulo, y dará por terminados automáticamente sus derechos
bajo esa Licencia.
Sin embargo, si usted cesa toda violación a esta Licencia, entonces su licencia proveniente de un
titular de copyright queda restaurada (a) provisionalmente, a menos y hasta que el titular del copyright
explícita y finalmente termine su licencia, y (b) permanentemente, si el titular del copyright falla en
notificarle de la violación por algún medio razonable en un tiempo menor a 60 días después del cese.
Además, su licencia proveniente de un titular del copyright particular queda restaurada
permanentemente si el titular del copyright le notifica de la violación por algún método razonable, es
la primera vez que usted ha recibido aviso de la violación de esta Licencia (para cualquier trabajo) de
ese titular del copyright, y usted remedia la violación en un tiempo menor a 30 días después de recibir
dicho aviso.
La terminación de sus derechos bajo ésta sección no termina la licencia de terceros que hayan
recibido copias o derechos de usted bajo ésta Licencia. Si sus derechos han sido terminados y no
restaurados permanentemente, recibir una copia de alguna parte o el total del mismo material no le da
ningún derecho de usarlo.
Página 158
Apéndice D: Licencia de Documentación Libre de GNU
D.10.- RE-LICENCIAMIENTO
Un "Sitio de Colaboración Masiva Multiautor" (o "Sitio CMM") significa cualquier servidor
World Wide Web que publique trabajos que puedan ser sujetos a copyright y que también provea
medios prominentes para que cualquiera pueda editar esos trabajos. Una Wiki pública que cualquiera
puede editar es un ejemplo de tal servidor. Una "Colaboración Masiva Multiautor" (o "CMM")
contenida en el sitio significa cualquier colección de trabajos que puedan ser sujetos a copyright
publicados en el sitio de CMM.
"CC-BY-SA" significa la licencia Creative Commons Attribution-Share Alike 3.0
(Reconocimiento-Compartir bajo la misma licencia 3.0 de Creative Commons) publicada por Creative
Commons Corporation, una corporación sin fines de lucro con base en San Francisco, California, así
como versiones futuras copyleft de esa licencia publicada por esa misma organización.
"Incorporar" significa publicar o re-publicar un Documento, como un todo o parcialmente, como
parte de otro Documento.
Un sitio CMM es "elegible para re-licenciamiento" si es licenciado bajo esta Licencia, y si todos
los trabajos que fueron publicados originalmente bajo esta Licencia en algún otro lugar diferente a esta
CMM, y subsecuentemente incorporado como un todo o parcialmente a la CMM, (1)no tenía textos
de cubierta o secciones invariantes, y (2) fueron incorporados previo a Noviembre 1, 2008.
El operador de un Sitio CMM puede volver a publicar una CMM contenida en el sitio bajo CC-
BY-SA en el mismo sitio en cualquier momento antes de Agosto 1, 2009, siempre que la CMM sea
elegible para re-licenciamiento.
D.12.- Notas:
[1]Ésta es la traducción del Copyright de la Licencia, no es el Copyright de esta traducción no
autorizada.
[2]La licencia original dice publisher, que es, estrictamente, quien publica, diferente de editor,
que es más bien quién prepara un texto para publicar. En castellano editor se usa para ambas cosas.
[3]En sentido estricto esta licencia parece exigir que los títulos sean exactamente
Acknowledgements, Dedications, Endorsements e History, en inglés.
Página 159
Apéndice D: Licencia de Documentación Libre de GNU
D.13.- Referencias:
1.http://www.gnu.org/copyleft/fdl.html
2.http://www.gnu.org/licenses/fdl-1.3-pdiff.ps (formato PostScript)
3.http://curso-sobre.berlios.de/gfdles/gfdles.html
4. http://creativecommons.org/licenses/by-sa/3.0/es/
Página 160
Apéndice E: Índices
Apéndice E: Índices
: ................................................................................... 44 J
. jobs .......................................................................... 103
. ................................................................................... 44 K
[ kill ............................................................................. 104
[ ................................................................................... 48 L
A let ................................................................................ 56
local ............................................................................ 56
alias ............................................................................ 51 logout ......................................................................... 56
B M
bg ............................................................................. 103 mapfile ....................................................................... 56
bind ............................................................................ 51
break .......................................................................... 45 P
builtin ................................................................... 11, 52 popd ........................................................................... 96
C printf ........................................................................... 57
pushd ......................................................................... 96
caller .......................................................................... 53 pwd ............................................................................ 47
cd ................................................................................ 45
command ................................................................... 53 R
compgen ................................................................. 131 read ............................................................................ 58
complete .................................................................. 132 readarray ................................................................... 59
compopt .................................................................. 135 readonly ..................................................................... 47
continue ..................................................................... 43 return .......................................................................... 48
D S
declare ....................................................................... 53 set ............................................................................... 61
dirs ............................................................................. 95 shift ............................................................................. 48
disown ..................................................................... 104 shopt .......................................................................... 65
E source ........................................................................ 59
suspend ................................................................... 105
echo ........................................................................... 55
enable ........................................................................ 55 T
eval ............................................................................. 45 test ............................................................................. 48
exec ............................................................................ 45 times .......................................................................... 49
exit .............................................................................. 45 trap ............................................................................. 49
export ......................................................................... 46 type ............................................................................ 59
F typeset ....................................................................... 60
fc .............................................................................. 137 U
fg .............................................................................. 103 ulimit ........................................................................... 60
G umask ........................................................................ 50
unalias ....................................................................... 61
getopts ....................................................................... 46 unset .......................................................................... 51
H W
hash ........................................................................... 47 wait .......................................................................... 104
help ............................................................................ 56
Página 161
Apéndice E: Índices
! ............................................................................ 26, 35 F
[ fi .................................................................................. 19
for ............................................................................... 18
[[ .................................................................................. 20 function ...................................................................... 23
] I
]] .................................................................................. 20 if .................................................................................. 18
{ in ................................................................................. 19
{ .................................................................................. 22 S
} select .......................................................................... 20
} .................................................................................. 22 T
C then ............................................................................ 19
time ............................................................................ 16
case ........................................................................... 19
D U
until ............................................................................. 18
do ............................................................................... 18
done ........................................................................... 18 V
E visible-stats ............................................................. 115
elif ............................................................................... 19 W
else ............................................................................. 19 while ........................................................................... 18
Página 162
Apéndice E: Índices
Página 163
Apéndice E: Índices
TIMEFORMAT ......................................................... 83
TMOUT ..................................................................... 83
U
TMPDIR ..................................................................... 84 UID ............................................................................. 84
V
visible-stats ............................................................. 115
Página 164
Apéndice E: Índices
Página 165