manual de Bash 4.1

176
Traducción del Manual de Referencia para Bash (version 4.1) Edicion 0.9 Noviembre de 2010 Chet Ramey, Case Western Reserve University Brian Fox, Free Software Foundation Mario Piñar Ramírez (Traducción)

description

Traducción no autorizada de la Documentación de Referencia de Bash. Está basada en la Edición 4.1, para Bash versión 4.1, de Diciembre de 2009. La edición original en inglés está fechada en Diciembre de 2009, mientras que esta traducción es de Noviembre de 2010. 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.

Transcript of manual de Bash 4.1

Page 1: manual de Bash 4.1

Traducción del

Manual de Referencia para Bash (version 4.1)

Edicion 0.9

Noviembre de 2010

Chet Ramey, Case Western Reserve UniversityBrian Fox, Free Software FoundationMario Piñar Ramírez (Traducción)

Page 2: manual de Bash 4.1

Esta es una traducción no autorizada de la Documentación de Referencia de Bash. Está basada en la Edición 4.1, para Bash versión 4.1, de Diciembre de 2009.

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

Copyright © 1988–2009 Free Software Foundation, Inc.

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

Puede comunicar sugerencias o errores en la dirección [email protected]

Página ii

Page 3: manual de Bash 4.1

Datos de la Edición original:

Bash Reference Manual - Reference Documentation for BashEdition 4.1, for Bash Version 4.1.December 2009

Chet Ramey, Case Western Reserve UniversityBrian Fox, Free Software Foundation

Bash - Manual de ReferenciaDocumentación de Referencia para BashEdición 4.1, para Bash versión 4.1Diciembre de 2009

Chet Ramey, Case Western Reserve UniversityBrian Fox, Free Software Foundation

Página iii

Page 4: manual de Bash 4.1

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 Foundation59 Temple Place, Suite 330,Boston, MA 02111-1307USA

Presentacion de la version original (traducida)

Este texto es una breve descripción de las características que están presentes en la shell Bash (versión 4.1 de 23 de diciembre de 2009)

Esta es la edición 4.1, actualizada por última vez el 23 de diciembre de 2009, del Manual de Referencia de GNU Bash para Bash Versión 4.1

Copyright © 1988-2009 Free Software Foundation, Inc.Se concede permiso para hacer y distribuir copias literales de este manual manteniendo el aviso

de copyright y este aviso de autorización en todas las copias.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, con la portada “A GNU Manual”, y con los textos de contra-portada como en el apartado (a) mostrado más abajo. Se incluye una copia de la licencia en la sección titulada “GNU Free Documentation License”.

(a) El texto de contraportada de la FSF es: Eres libre de copiar y modificar este manual GNU. Comprar copias en la GNU Press da soporte a la FSF para continuar desarrollando GNU y promoviendo la libertad de software.

Publicado por la Free Software Foundation59 Temple Place, Suite 330Boston, MA 02111-1307USA

Página iv

Page 5: manual de Bash 4.1

Índice de Contenido

Índice de contenido1.-Introducción.....................................................................................................................................9

1.1.-¿Qué es Bash?...........................................................................................................................91.2.-¿Qué es una shell?....................................................................................................................9

2.-Definiciones...................................................................................................................................113.-Características Básicas de la Shell.................................................................................................13

3.1.-Sintaxis de la shell..................................................................................................................133.1.1.-Modo de operación de la shell........................................................................................133.1.2.-Entrecomillado................................................................................................................14

3.1.2.1.-Carácter de Escape..................................................................................................143.1.2.2.-Comillas simples.....................................................................................................143.1.2.3.-Comillas Dobles......................................................................................................143.1.2.4.-Entrecomillado ANSI-C..........................................................................................143.1.2.5.-Traducciones Específicas de la Localización..........................................................15

3.1.3.-Comentarios....................................................................................................................153.2.-Comandos de Shell.................................................................................................................16

3.2.1.-Comandos simples..........................................................................................................163.2.2.-Tuberías..........................................................................................................................163.2.3.-Listas de Comandos........................................................................................................173.2.4.-Comandos Compuestos..................................................................................................17

3.2.4.1.-Construcciones Cíclicas..........................................................................................183.2.4.2.-Construcciones Condicionales................................................................................183.2.4.3.-Agrupando Comandos.............................................................................................21

3.2.5.-Coprocesos......................................................................................................................223.3.-Funciones de Shell..................................................................................................................233.4.-Parámetros de Shell................................................................................................................24

3.4.1.-Parámetros posicionales..................................................................................................253.4.2.-Parámetros Especiales.....................................................................................................25

3.5.-Expansiones de la shell...........................................................................................................263.5.1.-Expansión de Llaves.......................................................................................................273.5.2.-Expansión de Tildes........................................................................................................273.5.3.-Expansión de Parámetros de Shell..................................................................................283.5.4.-Sustitución de Comandos...............................................................................................313.5.5.-Expansión Aritmética.....................................................................................................323.5.6.-Sustitución de Procesos..................................................................................................323.5.7.-Separación de palabras....................................................................................................333.5.8.-Expansión de Nombres de Fichero.................................................................................33

3.5.8.1.-Concordancia de Patrones.......................................................................................343.5.9.-Eliminación del entrecomillado......................................................................................35

3.6.-Redirecciones.........................................................................................................................353.6.1.-Redireccionando la entrada.............................................................................................363.6.2.-Redireccionando la salida...............................................................................................36

Página v

Page 6: manual de Bash 4.1

Índice de Contenido

3.6.3.-Anexando la salida redirigida.........................................................................................373.6.4.-Redirigiendo la Salida Estándar y la Salida de Error Estándar.......................................373.6.5.-Anexando la Salida Estándar y la Salida de Error Estándar...........................................373.6.6.-Documentos Internos (Here Documents).......................................................................373.6.7.-Cadenas Internas (Here strings)......................................................................................383.6.8.-Duplicando Descriptores de Fichero...............................................................................383.6.9.-Moviendo Descriptores de Fichero.................................................................................383.6.10.-Abriendo descriptores de fichero para lectura y escritura............................................38

3.7.-Ejecutando comandos.............................................................................................................393.7.1.-Expansión de un comando simple..................................................................................393.7.2.-Búsqueda y Ejecución de Comandos..............................................................................393.7.3.-Entorno de Ejecución de Comandos...............................................................................403.7.4.-Entorno...........................................................................................................................413.7.5.-Estados de Salida............................................................................................................423.7.6.-Señales............................................................................................................................42

3.8.-Guiones de Shell.....................................................................................................................434.-Comandos Internos de la Shell.......................................................................................................44

4.1.-Comandos Internos de la Shell Bourne..................................................................................444.2.-Comandos Internos de Bash...................................................................................................514.3.-Modificando el Comportamiento de la Shell..........................................................................61

4.3.1.-El comando Interno Set..................................................................................................614.3.2.-El Comando Interno Shopt.............................................................................................66

4.4.-Comandos Internos Especiales...............................................................................................715.-Variables de Shell..........................................................................................................................73

5.1.-Variables de la Shell Bourne..................................................................................................735.2.-Variables de Bash...................................................................................................................74

6.-Características de Bash..................................................................................................................856.1.-Invocando a Bash...................................................................................................................856.2.-Ficheros de Inicio de Bash.....................................................................................................876.3.-Shells Interactivas...................................................................................................................89

6.3.1.-¿Qué es una Shell Interactiva?........................................................................................896.3.2.-¿Es esta una shell Interactiva?........................................................................................896.3.3.-Comportamiento de la Shell Interactiva.........................................................................89

6.4.-Expresiones Condicionales de Bash.......................................................................................916.5.-Aritmética de la Shell.............................................................................................................936.6.-Alias........................................................................................................................................946.7.-Arrays.....................................................................................................................................956.8.-La Pila de Directorios.............................................................................................................96

6.8.1.-Comandos Internos de la Pila de Directorios..................................................................966.9.-Controlando el Prompt...........................................................................................................976.10.-La Shell Restringida.............................................................................................................996.11.-El Modo POSIX de Bash......................................................................................................99

7.-Control de Tareas.........................................................................................................................103

Página vi

Page 7: manual de Bash 4.1

Índice de Contenido

7.1.-Fundamentos del Control de Tareas.....................................................................................1037.2.-Comandos Internos para el Control de Tareas.....................................................................1047.3.-Variables para el Control de Tareas.....................................................................................106

8.-Edición de la Línea de Comandos................................................................................................1078.1.-Introducción a la Edición de la Línea de Comandos............................................................1078.2.-Interacción con Readline......................................................................................................107

8.2.1.-Los Fundamentos de Readline al Desnudo...................................................................1088.2.2.-Comandos de Movimiento de Readline........................................................................1088.2.3.-Comandos para cortar texto de Readline......................................................................1098.2.4.-Argumentos de Readline...............................................................................................1098.2.5.-Buscando Comandos en la Historia..............................................................................110

8.3.-El Fichero de Inicialización de Readline..............................................................................1108.3.1.-La Sintaxis del Fichero de Inicialización de Readline..................................................1118.3.2.-Construcciones de inicialización condicionales...........................................................1178.3.3.-Ejemplo de Fichero de Inicialización...........................................................................118

8.4.-Comandos enlazables de Readline.......................................................................................1208.4.1.-Comandos de Movimiento............................................................................................1208.4.2.-Comandos para Manipular la Historia..........................................................................1218.4.3.-Comandos para Modificar el Texto..............................................................................1228.4.4.-Cortando y Pegando......................................................................................................1238.4.5.-Especificando Argumentos Numéricos........................................................................1258.4.6.-Permitiendo que Readline introduzca caracteres por tí................................................1258.4.7.-Macros de Teclado........................................................................................................1278.4.8.-Algunos comandos variados.........................................................................................127

8.5.-Modo vi de Readline............................................................................................................1308.6.-Completado Programable.....................................................................................................1308.7.-Comandos Internos para el Completado Programable.........................................................132

9.-Usando la Historia Interactivamente............................................................................................1379.1.-Características de Historia de Bash......................................................................................1379.2.-Comandos Internos para la Historia de Bash.......................................................................1389.3.-Expansión de la Historia.......................................................................................................139

9.3.1.-Designadores de Evento...............................................................................................1409.3.2.-Designadores de Palabra...............................................................................................1409.3.3.-Modificadores...............................................................................................................141

10.-Instalando Bash..........................................................................................................................14310.1.-Instalación Básica...............................................................................................................14310.2.-Compiladores y Opciones...................................................................................................14410.3.-Compilando para Múltiples Arquitecturas.........................................................................14410.4.-Nombres de Instalación......................................................................................................14410.5.-Especificando el Tipo de Sistema.......................................................................................14510.6.-Compartiendo Valores por Defecto....................................................................................14510.7.-Controles de Operación......................................................................................................14510.8.-Características Opcionales..................................................................................................145

Página vii

Page 8: manual de Bash 4.1

Índice de Contenido

Apéndice A: Informando de errores................................................................................................150C.2.-Diferencias Principales con la Shell de Bourne........................................................................151

B.1.-Diferencias de Implementación con la Shell SVR4.2.........................................................156 Apéndice C: GNU Free Documentation License............................................................................157

C.0.-PREAMBLE........................................................................................................................157C.1.-APPLICABILITY AND DEFINITIONS............................................................................157C.2.-VERBATIM COPYING......................................................................................................158C.3.-COPYING IN QUANTITY.................................................................................................159C.4.-MODIFICATIONS..............................................................................................................159C.5.-COMBINING DOCUMENTS............................................................................................161C.6.-COLLECTIONS OF DOCUMENTS..................................................................................161C.7.-AGGREGATION WITH INDEPENDENT WORKS.........................................................161C.8.-TRANSLATION.................................................................................................................162D.0.1.-TERMINATION..............................................................................................................162C.9.-FUTURE REVISIONS OF THIS LICENSE.......................................................................162C.10.-RELICENSING.................................................................................................................163C.11.-ADDENDUM: How to use this License for your documents...........................................163

Apéndice D: Licencia de Documentación Libre de GNU (Traducción).........................................164D.0.-PREÁMBULO.....................................................................................................................164D.1.-APLICABILIDAD Y DEFINICIONES..............................................................................164D.2.-COPIA LITERAL................................................................................................................166D.3.-COPIADO EN CANTIDAD...............................................................................................166D.4.-MODIFICACIONES...........................................................................................................167D.5.-COMBINACIÓN DE DOCUMENTOS.............................................................................168D.6.-COLECCIONES DE DOCUMENTOS...............................................................................169D.7.-AGREGACIÓN CON TRABAJOS INDEPENDIENTES.................................................169D.8.-TRADUCCIÓN...................................................................................................................169D.9.-TERMINACIÓN.................................................................................................................169D.9.1.-REVISIONES FUTURAS DE ESTA LICENCIA...........................................................170D.10.-RE-LICENCIAMIENTO...................................................................................................170D.11.-ADDENDUM: Cómo usar esta Licencia en sus documentos...........................................171D.12.-Notas:.................................................................................................................................171D.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

Page 9: manual de Bash 4.1

Capítulo 1: Introducción

1.- Introducción

1.1.- ¿Qué es Bash?Bash es la shell, o interprete de comandos, para el sistema operativo GNU. El nombre es un acrónimo para el 'Bourne-Again Shell', un juego de palabras de Stephen Bourne, el autor del prede-cesor directo del actual shell Unix sh, que apareció en la Séptima Edición de la versión de Unix de los Bell Labs Research (Laboratorios de Investigación de Bell).

Bash es ampliamente compatible con sh e incorpora características muy útiles de la Korn shell ksh y la C shell csh. Busca ser una implementación conforme al IEEE POSIX Shell y Herramientas parte de la especificación POSIX del IEEE (estándar IEEE 1003.1). Ofrece mejoras funcionales frente a sh tanto para uso interactivo como de programación.

Aunque el sistema operativo GNU proporciona otras shells, incluida una versión de csh, la shell Bash es la shell por defecto. Al igual que el resto del software GNU, Bash es bastante portable. Actualmente corre en casi todas las versiones de Unix y en algunos sistemas operativos más – existen implementaciones independientes para las plataformas MS-DOS, OS/2, y Windows.

1.2.- ¿Qué es una shell?En esencia una shell es simplemente un procesador de macros que ejecuta comandos. El término procesador de macros indica una funcionalidad donde texto y símbolos son expandidos para crear expresiones más largas.

Una shell de Unix es a la vez un interprete de comandos y un lenguaje de programación. Como interprete de comandos, la shell proporciona una interfaz de usuario para el amplio juego de utili-dades GNU. Las capacidades de lenguaje de programación permiten combinar estas utilidades. Se pueden crear archivos que contengan comandos, y que lleguen a ser comandos por si mismos. Estos nuevos comandos tienen la misma categoría que los comandos del sistema situados en directorios como '/bin', permitiendo a los usuarios o grupos establecer entornos personalizados para automa-tizar sus tareas comunes.

Las shells se pueden utilizar de modo interactivo o no-interactivo. En modo interactivo aceptan entradas desde el teclado. Cuando se ejecutan en modo no-interactivo, las shells ejecutan comandos leídos desde un fichero.

Una shell permite la ejecución de comandos GNU tanto de forma síncrona como asíncrona. La shell espera hasta que se completan los comandos síncronos antes de aceptar más entradas; los comandos asíncronos continúan ejecutándose paralelamente a la shell mientras que esta lee y ejecuta otros comandos. La redirección permite un control detallado de la entrada y la salida de estos comandos. Más aún, la shell permite controlar el contenido de los entornos de los comandos.

Las shells también proporcionan un pequeño juego de comandos internos (builtins) implemen-tando funcionalidades que mediante utilidades separadas serían imposibles de obtener o lo harían de forma poco apropiada. Por ejemplo, no se puede implementar a cd, break, continue y exec fuera de la shell porque estas manipulan directamente la propia shell. Los comandos internos history, getopts, kill o pwd, a parte de otros, pueden ser implementados en utilidades separadas, pero son más convenientes usados como comandos internos. Todos los comandos internos de la shell serán descritos en las secciones siguientes.

Mientras que la ejecución de comandos es esencial, gran parte del poder (y complejidad) de la

Página 9

Page 10: manual de Bash 4.1

Capítulo 1: Introducción

shell se debe a los lenguajes de programación embebidos en ella. Como cualquier lenguaje de alto nivel, la shell proporciona variables, construcciones de control del flujo, entrecomillado y funciones.

Las shells ofrecen características orientadas específicamente para el uso interactivo más que para aumentar el lenguaje de programación. Estas características interactivas incluyen control de tareas, edición de la linea de comandos, historia de comandos y alias. Cada una de estas caracterís-ticas son descritas en este manual.

Página 10

Page 11: manual de Bash 4.1

Capítulo 2: Definiciones

2.- DefinicionesEstas definiciones son usadas a lo largo de este manual

POSIXUna 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 builtinUn 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 controlUn token que realiza una función de control. Es una nueva linea o alguno de los siguientes: ‘||’, ‘&&’, ‘&’, ‘;’, ‘;;’, ‘|’, ‘|&’, ‘(’, o ‘)’.

estado de salidaEl valor retornado por un comando a su llamador. Este valor está restringido a ocho bits, así que el valor máximo es 255.

campoUna 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 son usados como nombre de comando y argumentos

nombre de archivoUna cadena de caracteres usados para identificar un archivo.

tareaUn 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 tareasUn mecanismo por el cual los usuarios pueden parar (suspender) y reiniciar (reanudar) selectivamente la ejecución de procesos.

metacaracterUn carácter que, cuando se encuentra sin entrecomillar, separa palabras. Un metaca-racter es un blanco o uno de los siguientes caracteres: ‘|’, ‘&’, ‘;’, ‘(’, ‘)’, ‘<’, o ‘>’.

nombreUna 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.

operadorUn 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

Página 11

Page 12: manual de Bash 4.1

Capítulo 2: Definiciones

metacaracter sin entrecomillar.

grupo de procesosUna colección o procesos relacionados cada uno de los cuales tiene el mismo identificador de grupo de procesos.

identificador (o ID) de grupo de procesosUn identificador único que representa un grupo de procesos durante su tiempo de vida.

palabra reservadaUna 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ñalUn mecanismo por el que cualquier proceso puede ser notificado por el kernel de un evento ocurrido en el sistema.

comandos internos especialesUn 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.

palabraUna secuencia de caracteres tratados como una unidad por el shell. Las palabras no pueden incluir metacaracteres sin entrecomillar.

Página 12

Page 13: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

3.- Características Básicas de la ShellBash es un acrónimo para 'Bourne-Again Shell'. La shell Bourne es la shell Unix tradicional escrita originalmente por Stephen Bourne. Todos los comandos internos de la shell Bourne están disponibles en Bash. Las reglas para evaluación y entrecomillado están tomadas de la especificación POSIX para la shell Unix 'estándar'.

Este capítulo resume brevemente los 'bloques de construcción' de la shell: comandos, estructuras de control, funciones de shell, parámetros de shell, expansiones de shell, redirecciones, que son un modo de dirigir la entrada y la salida desde y hacia un nombre de archivo, y la forma en la que la shell ejecuta comandos.

3.1.- Sintaxis de la shellCuando la shell lee una entrada, procede a realizar una secuencia de operaciones. Si la entrada indica el principio de un comentario, la shell ignora el signo de comentario ('#') y el resto de esa línea.

En caso contrario, hablando de forma aproximada, la shell lee su entrada y divide esta en palabras y operadores, empleando las reglas de entrecomillado para seleccionar qué significado debe asignar a las palabras y caracteres.

La shell luego analiza esos tokens en comandos y otras construcciones, elimina el significado especial de ciertas palabras o caracteres, expande otras, redirecciona la entrada y la salida según sea necesario, ejecuta los comandos especificados, espera por el estado de salida de los comandos, y pone disponible ese estado de salida para favorecer su inspección o procesamiento.

3.1.1.- Modo de operación de la shellLo que sigue es una breve descripción del modo en que trabaja la shell cuando esta lee y ejecuta un comando. Básicamente, la shell hace lo siguiente:

1. Lee su entrada desde un archivo (vea la Sección 3.8 [Guiones de shell]), desde una cadena suministrada como un argumento a la opción de invocación '-c' (vea la Sección 6.1 [Invocando a Bash], o desde la terminal del usuario.

2. Rompe la entrada en palabras y operadores, obedeciendo las reglas de entrecomillado des-critas en la Sección 3.1.2 [Entrecomillado]. Estos tokens están separados por metacaracteres. La expansión de Alias se realiza en este paso (vea Sección 6.6 [Alias]

3. Analiza sintácticamente los tokens en comandos simples y compuestos (vea Sección 3.2 [Comandos de Shell])

4. Realiza varias expansiones de shell (vea la Sección 3.5 [Expansiones de la Shell], rompe los tokens expandidos en listas de nombres de ficheros (vea Sección 3.5.8 [Expansión de Nombres de Fichero]) y comandos y argumentos.

5. Realiza cualquier redirección que sea necesaria (vea la Sección 3.6 [Redirecciones]) y elimina los operadores de redirección y sus operandos de la lista de argumentos.

6. Ejecuta el comando (vea la Sección 3.7 [Ejecutando Comandos]).7. Opcionalmente espera hasta que se complete la ejecución del comando y recolecta su estado

de salida (vea la Sección 3.7.5 [Estados de salida]).

Página 13

Page 14: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

3.1.2.- EntrecomilladoEl entrecomillado es usado para eliminar el significado especial a ciertos caracteres o palabras para la shell. El entrecomillado puede ser usado para eliminar el tratamiento especial para los caracteres especiales, o para prevenir a las palabras reservadas de ser reconocidas como tales, y para prevenir la expansión de parámetros.

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

Página 14

Page 15: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

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)

\n carácter de nueva línea

\r carácter de retorno de carro

\t tabulador horizontal

\v tabulador vertical

\\ carácter barra invertida

\' carácter comilla simple

\” carácter comilla doble

\nnn el carácter de 8 bits cuyo valor es el número octal nnn (de uno a tres dígitos).

\xHH el carácter de 8 bits cuyo valor es el número hexadecimal HH (uno o dos dígitos hexadecimales)

\cx un carácter control-x

El resultado expandido se encuentra entrecomillado con comilla simple, como si el signo '$' no estuviese presente.

3.1.2.5.- Traducciones Específicas de la Localización

Una cadena entrecomillada con comillas dobles precedida por un signo ('$') causará que la cadena sea traducida de acuerdo a la localización actual. Si la localización actual es C o POSIX, el signo dólar es ignorado. Si la cadena es traducida y reemplazada, el sustituto es entrecomillado con comillas dobles.

Algunos sistemas usan el catálogo de mensajes seleccionado por la variable de shell LC_MESSAGES. Otros crean el nombre del catálogo de mensajes a partir del valor de la variable del shell TEXTDOMAIN, posiblemente añadiendo un sufijo o '.mo'. Si usa la variable TEXTDOMAIN, puede necesitar ajustar la variable TEXTDOMAINDIR a la localización de los archivos del catálogo de mensajes. Otros incluso usan ambas variables de la forma:

TEXTDOMAINDIR/LC_MESSAGES/TEXTDOMAIN.mo.

3.1.3.- ComentariosEn una shell no-interactiva, o en una shell interactiva en la que la opción interactive_comments para el comando interno shopt está activada (vea la sección 4.3.2 [ El Comando Interno Shopt]), una palabra comenzando con '#' provoca que la palabra y todos los caracteres que le siguen en esa línea sean ignorados. Una shell interactiva sin la opción

Página 15

Page 16: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

interactive_comments activada no permite comentarios. La opción interactive_coments está establecida por defecto en las shells interactivas. Vea la sección 6.3 [Shells Interactiva], para una descripción de qué hace una shell interactiva.

3.2.- Comandos de ShellUn comando de shell simple como echo a b c consiste en el propio comando seguido por argu-mentos separados por espacios.

Comandos de shell más complejos están compuestos de comandos simples situados juntos de varias formas; en una tubería en la cual la salida de un comando se convierte en la entrada del segundo, en una construcción tipo bucle o condicional, o en algunas otras agrupaciones.

3.2.1.- Comandos simplesUn comando simple es el tipo de comando que se encuentra con más frecuencia. Este es sólo una 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íasUna 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 [ [| ir |&] 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 es realizada 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 es ejecutada 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 es ejecutado 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

Página 16

Page 17: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

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 ComandosUna 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 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 opera-dores de control '&&' y '||' respectivamente. Las listas AND y OR son ejecutadas con asociatividad a la izquierda

Una lista AND tiene la formacomando1 && comando2

comando2 se ejecuta sí y sólo sí el comando1 retorna un estado de salida de cero.Una lista OR tiene la formacomando1 || 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 CompuestosLos 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.

Página 17

Page 18: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

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.

untilLa 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.

whileLa 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.

forLa sintaxis del comando for es:

for nombre [ [in [palabras …] ] ; ] do comandos; done

Expande las palabras y ejecuta los comandos uno por cada miembro en la lista resul-tante, con nombre asignado al miembro actual. Si 'in palabras' no está presente, el comando for ejecuta los comandos uno por cada parámetro posicional que se le pase, como si se hubiera especificado 'in $@' (vea la Sección 3.4.2 [Parámetros Especiales]). El estado de retorno es el estado de salida del último comando que ejecuta. Si no hay miembros en la expansión de palabras, no se ejecuta ningún comando y el estado de retorno es cero.

Bash también soporta una forma alternativa para el comando for:for (( expr1 ; expr2 ; expr3 )) ; do comandos ; done

Primero se evalúa la expresión aritmética expr1 de acuerdo con las reglas descritas más abajo (vea la Sección 6.5 [Aritmética de la Shell]). La expresión aritmética expr2 se evalúa a continuación repetidamente hasta que se evalúa como distinta de cero. Cada vez que expr2 se evalúa con un valor distinto de cero, se ejecutan los comandos y se evalúa la expresión expr3 .Si se omite alguna expresión se toma como si esta se evaluara a 1. El valor devuelto es el estado de salida del último comando en la lista que es ejecutado, o false si alguna de las expresiones es inválida.

Los comandos internos break y continue (vea la Sección 4.1 [Comandos internos de la Shell Bourne]) pueden ser usados para controlar la ejecución del bucle.

3.2.4.2.- Construcciones Condicionales

ifLa sintáxis del comando if es:

Página 18

Page 19: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

if comandos-test; thencomandos-consiguientes

[elif mas-comandos-test; thenmás-siguientes;]

[else alternativas-consiguientes; ]fi

La lista de comandos-test se ejecuta y si esta retorna un estado igual a cero se ejecuta la lista de comandos-consiguientes. Si los comandos-test retornan un estado distinto de cero, se ejecuta cada lista elif en turnos, y si su estado de salida es igual a cero, se ejecutan los correspondientes mas-consiguientes y el comando finaliza. Si la construcción 'else alternativas-consiguientes' está presente y el comando final en la última clausula if o elif tiene un estado de salida distinto de cero, entonces se ejecutan las alternativas-consiguientes. El estado de retorno es el estado de salida del último comando ejecutado o cero si ninguna condición fue evaluada como true.

caseLa sintaxis del comando case es:

case palabra in [ [(] patrón [| patrón] ….) lista-comandos ;;]... esac

case ejecutará selectivamente la lista-comandos correspondiente al primer patrón que se ajusta con palabra. Si la opción de shell nocasematch (vea la descripción de shopt en la Sección 4.3.2 [El Comando Interno Shopt]) está activada, el ajuste se realiza sin diferenciar entre mayúsculas y minúsculas para los caracteres alfabéticos. El '|' se usa para separar patrones múltiples, y el operador ')' termina una lista de patrones. Una lista de patrones y su lista de comandos asociada se conoce como una clausula.

Cada clausula debe terminar con ';;', ';&' o ';;&'. La palabra sufre expansión de tildes, expansión de parámetros, sustitución de comandos, expansión aritmética y eliminación de 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 puede ser usado para describir una interesante característica de un animal:

echo -n "Introduzca el nombre de un animal: "read ANIMALecho -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";;

esacecho " 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.

Página 19

Page 20: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

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.

selectLa 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 en 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 de retorno es 0; de otro modo el estado de retorno es 1. Esto es exactamente equivalente a

let “expresión”

Vea la Sección 4.2 [Comandos Internos de Bash] para una descripción completa del comando interno let.

[[ … ]][[ expresión ]]

Devuelve un estado de 0 ó 1 dependiendo de la evaluación de la expresión condicional expresión. Las expresiones se componen de expresiones fundamentales descritas más abajo en la Sección 6.4 [Expresiones Condicionales de Bash]. La división de palabras y la expansión de nombres de archivo no se realiza en las palabras encerradas entre '[[' y ']]'; se realizan la expansión de tildes, la expansión de parámetros y variables, la expansión aritmética, la sustitución de comandos, la sustitución de procesos y la eliminación del entrecomillado. Los operadores condicionales como '-f' deben ser

Página 20

Page 21: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

desentrecomillados para que sean reconocidos como primarios. Cuando se usan con '[[', los operadores '<' y '>' ordenan lexicográficamente usando la localización actual.

Cuando se usan los operadores '==' y '!=' la cadena a la derecha del operador se considera como un patrón y ajusta conforme a las reglas descritas más abajo, en la Sección 3.5.8.1 [Ajuste a Patrones]. Si la opción de shell nocasematch (vea la descripción de shopt en la Sección 4.3.2 [El Comando Interno Shopt]) está activada, el ajuste se realiza sin diferenciar entre minúsculas y mayúsculas en el caso de caracteres alfabéticos. El valor devuelto es 0 si las cadenas ajustan ('==') o no ajustan ('!=') al patrón, y 1 de otro modo. Cualquier parte del patrón puede ser entrecomillada para forzar a que sea ajustada como una cadena.

Hay un operador binario adicional '=~ ', con la misma precedencia que '==' y '!=' . Cuando se utiliza este la cadena a la derecha del operador es considerada como una expresión regular extendida y ajustada en consecuencia (como en regex3). El valor devuelto es 0 si la cadena ajusta al patrón, y 1 en otro caso. Si la expresión regular es incorrecta sintácticamente el valor devuelto de la expresión condicional es 2. Si la opción de la shell nocasematch (vea la descripción de shopt en la Sección 4.3.2 [El Comando Interno Shopt]) está activada, el ajuste se realiza sin diferenciar entre mayúsculas y minúsculas para los caracteres alfabéticos. Cualquier parte del patrón puede ser entrecomillado para forzar a que este ajuste como una cadena. Las subcadenas ajustadas por subexpresiones parentizadas dentro de la expresión regular son guardadas en la variable de tipo array BASH_REMATCH. Los elementos de BASH_REMATCH con índice 0 será la porción de la cadena que ajusta con la expresión regular completa. El elemento de BASH_REMATCH con el índice n es la porción de la cadena que encaja con la n-ésima subexpresión parentizada.

Las expresiones se pueden combinar usando los siguientes operadores, listados en orden de precedencia decreciente:

( expresión )

Devuelve el valor de expresión. Este puede ser usado para sobrescribir la precedencia normal de los operadores.

! expresión

Devuelve true si la expresión es false

expresión1 && expresión2

Devuelve true si tanto expresión1 como expresión2 son true.

expresión1 || expresión2

Devuelve true si expresión1 o expresión2 son true.

Los operadores && y || no evalúan expresión2 si el valor de expresión1 es suficiente para determinar el valor devuelto por la expresión condicional completa.

3.2.4.3.- Agrupando Comandos

Bash proporciona dos maneras de agrupar una lista de comandos para ser ejecutada como una unidad. Cuando los comandos se agrupan, las redirecciones pueden ser aplicadas a la lista de comandos completa. Por ejemplo, la salida de todos los comandos en la lista puede ser redirigida a

Página 21

Page 22: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

un único flujo.

( )( lista )

Encerrar una lista de comandos entre paréntesis produce que se cree un entorno de subshell (vea la Sección 3.7.3 [Entorno de Ejecución de Comandos]), y cada uno de los comandos en lista será ejecutado en ese subshell. Puesto que la lista es ejecutada en un subshell, el efecto de la asignación de variables no permanece tras la finalización de la subshell.

{ }{ lista; }

Encerrar una lista de comandos entre llaves produce que lista sea ejecutada en el contexto de shell actual. No se crea ningún subshell. El punto y coma (o nueva línea) que sigue a lista es obligatorio.

A parte de la creación de la subshell hay una sutil diferencia entre el uso de estas dos construc-ciones debido a razones históricas. Las llaves son palabras reservadas, así que deben ser separadas de la lista de comandos por blancos u otros metacaracteres de shell. Los paréntesis son operadores, y son reconocidos como tokens separados por la shell incluso si no están separados de la lista de comandos por espacios en blanco.

El estado de salida de ambas construcciones es el estado de salida de la lista de comandos.

3.2.5.- CoprocesosUn coproceso es un comando de shell precedido por la palabra reservada coproc. Un coproceso es ejecutado asíncronamente en un subshell, como si el comando hubiese terminado con el operador de control '&', con un cauce de dos sentidos establecido entre el shell en ejecución y el coproceso.

El formato de ejecución de un coproceso es:coproc [NOMBRE] comando [redirecciones]

Esto crea un coproceso llamado NOMBRE. Si no se proporciona NOMBRE, el nombre por defecto es COPROC. No se debe proporcionar NOMBRE si el comando es un comando simple (vea la Sección 3.2.1 [Comandos Simples]); de otro modo, se interpretará este como la primera palabra del comando simple.

Cuando se ejecuta el coproceso, la shell crea una variable de tipo array (vea la Sección 6.7 [Arrays]), llamada NOMBRE en el contexto de la shell en ejecución. La salida estándar del comando se conecta a través de un cauce a un descriptor de fichero en la shell en ejecución, y este descriptor de fichero se asigna a NOMBRE[0]. La entrada estándar del comando se conecta a través de un cauce a un descriptor de fichero en la shell en ejecución, y ese descriptor de fichero se asigna a NOMBRE[1]. 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

Page 23: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

3.3.- Funciones de ShellLas funciones de shell son una manera de agrupar comandos para ejecutarlos más tarde usando un único nombre para todo el grupo. Estas se ejecutan justo igual que un comando “regular”. Cuando se utiliza el nombre de una función de shell como un simple nombre de comando, se ejecuta la lista de comandos asociados con ese nombre de función. Las funciones de shell son ejecutadas en el contexto actual de la shell; no se crea ningún nuevo proceso para interpretarlas.

Las funciones se declaran usando la siguiente sintaxis:[ function ] nombre () comando-compuesto [ redirecciones ]

Esto define una función de shell llamada nombre. La palabra reservada function es opcional. Si se suministra la palabra reservada function, los paréntesis son opcionales. El cuerpo de la función es el comando compuesto comando-compuesto (vea la Sección 3.2.4 [Comandos Compuestos]). Este comando es normalmente una lista encerrada entre { y }, pero puede ser cualquier comando compuesto listado más arriba. El comando-compuesto se ejecuta en cualquier lugar donde se especifique nombre como nombre de un comando. Cualquier redirección (vea la Sección 3.6 [Redirecciones]) asociada con la función de shell se lleva a cabo cuando se ejecuta la función.

Una definición de función se puede eliminar usando la opción '-f' con el comando interno unset (vea la Sección 4.1 [Comandos Internos de la Shell Bourne]).

El estado de salida de una definición de función es cero a menos que ocurra un error de sintaxis o que previamente exista una función de sólo lectura con el mismo nombre.

Cuando se ejecuta la función, el estado de salida de esta es el estado de salida del último comando ejecutado en el cuerpo de su definición.

Advierta que por razones históricas, en su uso más común las llaves que rodean el cuerpo de la función deben estar separadas del cuerpo mediante caracteres blancos o nuevas lineas. Este es debido a que las llaves son palabras reservadas y son sólo reconocidas como tales cuando están separadas de la lista de comandos por espacios en blanco o cualquier otro metacaracter de shell. También, cuando usamos llaves, la lista de comandos debe terminar en un punto y coma, un '&', o una nueva línea.

Cuando se ejecuta una función, los argumentos pasados a la función se convierten en parámetros posicionales durante su ejecución (vea la Sección 3.4.1 [Parámetros Posicionales]). El parámetro especial '#' que se expande al número de parámetros posicionales, es actualizado para reflejar el cambio. El parámetro especial 0 permanece sin cambios. El primer elemento de la variable FUNCNAME se asigna al nombre de la función mientras que la función está en ejecución.

Todos los demás aspectos del entorno de ejecución de la shell son los mismos para la función y su llamador con estas excepciones: las trampas DEBUG y RETURN no son heredades a menos que se le haya dado a la función el atributo trace usando el comando interno declare o se haya activado la opción '-o functrace' con el comando interno set (en cuyo caso todas las funciones heredan las trampas DEBUG y RETURN), y la trampa ERR no es heredada a menos que la opción de shell '-o errtrace' haya sido activada. Vea la Sección 4.1 [Comandos Internos de la Shell Bourne], para una descripción del comando interno trap.

Si se ejecuta el comando interno return en una función, la función termina y la ejecución continua con el siguiente comando después de la llamada a la función. Cuando una función termina,

Página 23

Page 24: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

los valores de los parámetros posicionales y el parámetro especial '#' son restaurados a los valores que tenían antes de la ejecución de la función. Si se proporciona a return un argumento numérico, este es el estado devuelto por la función; de otro modo el estado devuelto por la función es el estado de salida del último comando ejecutado antes del return;

Se pueden declarar variables locales a la función utilizando el comando interno local. Estas variables son visibles sólo para la función y los comandos que esta invoca.

Los nombres de función y sus definiciones pueden ser listadas con la opción '-f' de los comandos internos declare o typeset (vea la Sección 4.2 [Comandos Internos de Bash]). La opción '-F' de los comandos internos declare o typeset listará únicamente los nombres de las funciones (y opcionalmente el archivo fuente y el número de línea, si la opción de shell extdebug está activada). Las funciones pueden ser exportadas con la opción '-f' del comando interno export (vea la Sección 4.1 [Comandos Internos de la Shell]), de forma que los subshells las tengan definidas automáticamente. Advierta que tener funciones y variables de shell con el mismo nombre puede llevar a tener múltiples entradas con el mismo nombre en el entorno pasado a las shells hijas. Debe tenerse especial cuidado en aquellos casos donde esto puede causar problemas.

Las funciones pueden ser recursivas. No existe límite en el número de llamadas recursivas posibles.

3.4.- Parámetros de ShellUn parámetro es una entidad que almacena valores. Este puede ser un nombre, un número o uno de los caracteres especiales listados más abajo. Una variable es un parámetro identificado por un nombre. Una variable tiene un valor y cero o más atributos. Los atributos son asignados usando el comando interno declare. (vea la descripción del comando interno declare en la Sección 4.2 [Comandos Internos de Bash]).

Un parámetro está establecido si le ha sido asignado un valor. La cadena nula es un valor válido. Una vez que una variable está establecida puede ser eliminada únicamente usando el comando interno unset.

Una variable puede ser asignada mediante una sentencia de la forma:nombre=[valor]

Si no se da el valor, se asigna a la variable la cadena nula. Todos los valores sufren expansión de tilde, expansión de parámetros y variables, sustitución de comandos, expansión aritmética y eliminación de entrecomillado (detallado más abajo). Si la variable tiene establecido su atributo integer, entonces su valor se evalúa como una expresión aritmética incluso si no se ha usado la expansión $(( … )) (vea la Sección 3.5.5 [Expansión Aritmética]. La división de palabras no se realiza, con la excepción de “$@” como se explica más abajo. No se realiza la expansión de nombres de fichero. Las sentencias de asignación pueden aparecer también como argumentos en los comandos internos alias, declare, typeset, export, readonly y local.

En el contexto donde una sentencia de asignación está asignando un valor a una variable de la shell o un índice de un array (vea la Sección 6.7 [Arrays]), el operador '+=' puede ser usado para agregar o añadir el valor dado al valor previo de la variable. Cuando se aplica el operador '+=' a una variable para la cual se ha establecido el atributo integer (entero), el valor se evalúa como una expresión aritmética y se añade al valor actual de la variable, la cual también se evalúa. Cuando se aplica el operador '+=' a una variable de tipo array usando una asignación compuesta (vea la

Página 24

Page 25: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

Sección 6.7 [Arrays]), el valor de la variable no es eliminado (como sí lo es cuando se usa '='), y se agregan 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 posicionalesUn 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 posicio-nales 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 EspecialesLa 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 son separados por 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').

Página 25

Page 26: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

$ 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 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.

3.5.- Expansiones de la shellLa expansión se realiza en la línea de comandos después de que esta haya sido dividida en tokens. Se realizan siete tipos de expansiones:

• expansión de llaves• expansión de tildes• expansión de parámetros y variables• sustitución de comandos• expansión aritmética• división de palabras• expansión de nombres de archivo.El orden de las expansiones es: expansión de llaves, expansión de tildes, expansión de pará-

metros y variables, expansión aritmética y sustitución de comandos (realizada de izquierda a derecha), división de palabras y expansión de nombres de archivo.

En sistemas que lo soporten hay disponible un tipo adicional de expansión: la sustitución de procesos. Esta se realiza al mismo tiempo que la expansión de parámetros y variables, la expansión aritmética y la sustitución de comandos.

Sólo la expansión de llaves, la división de palabras y la expansión de nombres de fichero pueden cambiar el número de palabras de la expansión; otras expansiones expanden de palabra a palabra. La única excepción a esto son las expansiones de “$@” (vea la Sección 3.4.2 [Parámetros Especiales]) y “${nombre[@]}” (vea la Sección 6.7 [Array])

Después de realizar todas las expansiones se realiza la eliminación del entrecomillado (vea la Sección 3.5.9 [Eliminación del Entrecomillado]).

Página 26

Page 27: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

3.5.1.- Expansión de LlavesLa expansión de llaves es un mecanismo por el cual se pueden generar cadenas arbitrarias. Este mecanismo es similar a la expansión de nombres de fichero (vea la Sección 3.5.8 [Expansión de Nombres de Fichero]), pero los nombres de archivo generados no existen. Los patrones para la expansión de llaves tienen la forma de un preámbulo opcional, seguido por o bien una serie de cadenas separadas por comas o bien una expresión secuencia encerrada entre llaves, seguido por un epílogo opcional. El preámbulo se usa como prefijo para cada una de las cadenas contenidas entre las llaves, y el epílogo se añade al final de cada cadena resultante, expandiendo de derecha a izquierda.

Las expansiones de llaves pueden ser anidadas. No se ordena el resultado de cada cadena expandida; se mantiene el orden de izquierda a derecha. Por ejemplo:

bash$ echo a{d,c,b}e

ade ace abe

Una expresión secuencia tiene la forma {x..y[..incr]}, donde x e y son enteros o caracteres únicos, e incr, es un incremento opcional, dado como un valor entero. Cuando se suministran enteros, la expresión expande a cada número entre x e y, ambos inclusive. Los enteros suministrados pueden ir precedidos de '0' para forzar a que cada término tenga la misma longitud. Cuando x o y comienzan con un cero, la shell intenta forzar a todos los términos generados a contener el mismo número de dígitos, añadiendo ceros a la izquierda cuando sea necesario. Cuando se suministran caracteres, la expresión se expande lexicográficamente a cada carácter entre x e y, ambos inclusive. Advierta que tanto x como y deben ser del mismo tipo. Cuando se utiliza el incremento este se usa como la diferencia entre cada uno de los términos. El incremento por defecto es 1 o -1 según corresponda.

La expansión de llaves se realiza antes de cualquier otra expansión, y cualquier carácter especial para otras expansiones se mantiene en el resultado. Esto es estrictamente textual. Bash no aplica ninguna interpretación sintáctica al contexto de la expansión o al texto entre los corchetes. Para evitar conflictos con la expansión de parámetros, la cadena '${' no se considera apta para la expansión de llaves.

Una expansión de llaves formada correctamente debe contener las llaves de apertura y de cierre sin entrecomillar, y al menos una coma o una expresión secuencia sin entrecomillar en ambos casos. Cualquier expansión de llaves formada incorrectamente permanecerá sin cambios.

Un '{' o una ',' pueden ser entrecomilladas con una barra invertida para prevenir que sea consi-derada como parte de una expresión de llaves.

Esta construcción es frecuentemente usada como una abreviatura cuando el prefijo común de la cadena a generar es mayor que en el ejemplo siguiente:

mkdir /usr/local/src/bash/{old, new, dist, bugs}

ochown root /usr/{ucb/{ex,edit},lib/{ex?.?*, how_ex}}

3.5.2.- Expansión de TildesSi una palabra comienza con un carácter tilde ('~ ') sin entrecomillar todos los caracteres anteriores a la primera barra no entrecomillada (o todos los caracteres si no hay barras sin entrecomillar) son

Página 27

Page 28: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

considerados como un prefijo-tilde. Si ninguno de los caracteres en el prefijo-tilde están entrecomi-llados, los caracteres en el prefijo-tilde que siguen a la tilde son tratados como un posible nombre de inicio de sesión. Si este nombre de inicio de sesión es la cadena nula, la tilde es reemplazada por el valor de la variable de shell HOME. Si HOME no está establecida, en su lugar se utiliza el directorio home del usuario que está ejecutando la shell. De otro modo, el prefijo-tilde es reemplazado con el directorio home asociado con el nombre de inicio de sesión especificado.

Si el prefijo-tilde es '~+', el valor de la variable PWD reemplaza al prefijo-tilde. Si el prefijo-tilde es '~-' se sustituye por el valor de la variable OLDPWD, si esta está establecida.

Si los caracteres que siguen a la tilde en el prefijo-tilde consisten en un número N, opcional-mente precedido por '+' o '-', el prefijo-tilde se sustituye por el correspondiente elemento de la pila de directorios, como si fuera mostrado por el comando interno dirs invocado con los caracteres que siguen al prefijo-tilde como argumento (vea la Sección 6.8 [La Pila de Directorios]). Si el prefijo-tilde, sin la tilde, consiste en un número sin que vaya acompañado de '+' o '-', se asume que va acompañado del signo '+'.

Si el nombre de inicio de sesión es inválido, o la expansión de tilde falla, la palabra se mantiene sin cambios.

Cada asignación de variables se comprueba inmediatamente en busca de prefijos-tilde sin entrecomillar siguiendo al ':' o al primer '='. En estos casos, la expansión tilde es inmediata. Por consiguiente, uno pude usar los nombres de fichero con tildes en asignaciones a PATH, MAILPATH y CDPATH, y la shell asigna el valor expandido.

La siguiente tabla muestra como Bash trata los prefijos-tilde sin entrecomillar:

~ El valor de $HOME

~/foo '$HOME/foo'

~fred/foo El subdirectorio foo del directorio home del usuario fred

~+foo '$PWD/foo'

~-/foo '${OLDPWD-'~-'}/foo'

~N La cadena que sería mostrada por 'dirs +N'

~+N La cadena que sería mostrada por 'dirs +N'

~-N La cadena que sería mostrada por 'dirs +N'

3.5.3.- Expansión de Parámetros de ShellEl carácter '$' inicia la expansión de parámetros, la sustitución de comandos o la expansión aritmé-tica. El nombre del parámetro o el símbolo a expandir puede ser encerrado entre llaves, lo que es opcional, pero sirve para proteger la variable a ser expandida de que los caracteres inmediatamente siguientes a ella puedan ser interpretados como parte del nombre.

Cuando se usan las llaves, la llave de cierre que se utiliza es la primera '}' no escapada mediante una barra invertida o encerrada en una cadena entrecomillada, y no encerrada en una expansión aritmética, sustitución de comandos o expansión de parámetros embebidas.

La forma básica de la expansión de parámetros es ${parámetro}. Se sustituye el valor de parámetro. Las llaves son obligatorias cuando el parámetro es un parámetro posicional con más de

Página 28

Page 29: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

un dígito o cuando el parámetro es seguido por un carácter que no debe ser interpretado como parte de su nombre.

Si el primer carácter del parámetro es una exclamación de cierre (!), se realiza una indirección de variables de un nivel. Bash utiliza el valor de la variable formada con el resto del parámetro como el nombre de la variable; esta variable entonces se expande y ese valor se utiliza en el resto de la sustitución, en vez del valor del parámetro por sí mismo. Esto se conoce como expansión indirecta. Las excepciones a esto son las expansiones ${!prefijo*} y ${!nombre[@]} descritas más abajo. La exclamación de cierre debe ir inmediatamente a continuación de la llave izquierda para que indique la indirección.

En todos los casos que se dan más abajo, palabra se somete a expansión de tildes, expansión de parámetros, sustitución de comandos y expansión aritmética.

Cuando no se realiza la expansión de subcadenas, usando la forma descrita más abajo, Bash analiza en busca de un parámetro que no esté establecido o sea nulo. Omitir el dos puntos resulta en que el chequeo se realiza sólo en busca de un parámetro que no esté establecido. Dicho de otro modo, si se incluye el dos puntos, el operador chequea tanto la existencia del parámetro como que su valor no sea nulo; si el dos puntos se omite, el operador chequea únicamente la existencia.

${parámetro:-palabra}

Si el parámetro no está establecido o es nulo, se sustituye la expansión de palabra. De otro modo, se sustituye 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 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 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 la expansión de palabra

${parámetro:desplazamiento}

${parámetro:desplazamiento:longitud}

Expande hasta longitud caracteres del parámetro comenzando por el carácter especi-ficado 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

Página 29

Page 30: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

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.

${#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 marginal 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

Página 30

Page 31: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

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.

${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.

3.5.4.- Sustitución de Comandos.La sustitución de comandos permite que la salida de un comando sustituya al propio comando. La sustitución de comandos ocurre cuando un comando es encerrado de la siguiente manera:

$(comando)

o

Página 31

Page 32: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

`comando`

Bash realiza la expansión ejecutando el comando y reemplazando la sustitución del comando con la salida estándar del comando, con cualquier carácter nueva línea marginal eliminado. Las nuevas líneas embebidas en el interior no son eliminadas, pero pueden ser eliminadas durante la división de palabras. La sustitución del comando $(cat archivo) puede ser reemplazada por su equivalente mucho más rápido $(< archivo).

Cuando se utiliza la forma antigua, encerrada entre tildes invertidas ('`'), las barras invertidas mantienen su significado literal excepto cuando van seguidas de '$', ''', o '\'. La primera tilde inver-tida no precedida por una barra invertida termina la sustitución de comandos. Cuando se usa la forma $(comando), todos los caracteres entre los paréntesis forman el comando; ninguno se trata de forma especial.

La sustitución de comandos puede ser anidada. Para anidar cuando se utiliza la forma antigua, se debe escapar las tildes inversas internas con barras invertidas.

Si la sustitución aparece entre dobles comillas, no se realiza la separación de palabras y la expansión de nombres de ficheros en los resultados.

3.5.5.- Expansión AritméticaLa expansión aritmética permite la evaluación de una expresión aritmética y la sustitución del resul-tado. El formato para la expansión aritmética es:

$(( expresión ))

La expresión se trata como si estuviera encerrada entre dobles comillas, pero unas comillas dobles encerradas entre los paréntesis no se tratan de forma especial. Todos los tokens en la expre-sión sufren expansión de parámetros, sustitución de comandos y eliminación del entrecomillado. La expansión aritmética puede ser anidada.

La evaluación se realiza de acuerdo con las reglas listadas más abajo (vea la Sección 6.5 [Aritmética de la Shell]). Si la expresión es inválida, Bash imprime un mensaje indicando el fallo en la salida de error estándar y no se produce ninguna sustitución.

3.5.6.- Sustitución de Procesos.La sustitución de procesos está soportada en sistemas que permiten tuberías con nombre (FIFOs) o el método de denominar los archivos abiertos con '/dev/fd'. Esta toma la forma:

<(lista)

o>(lista)

La lista de procesos se ejecuta con su entrada o su salida conectada a un FIFO o a un archivo del tipo '/dev/fd'. El nombre de este archivo se pasa como argumento al comando actual como resultado de la expansión. Si se utiliza la forma >(lista) la escritura en el archivo proporcionará entrada para la lista. Si se utiliza la forma <(lista) el archivo pasado como un argumento debe leer para obtener para obtener la salida de la lista. Advierta que no deben aparecer espacios entre < o > y el paréntesis izquierdo, de otro modo la construcción se interpretará como una redirección.

Cuando está disponible, la sustitución de procesos se realiza de forma simultanea con la expan-sión de parámetros y variables, la sustitución de comandos y la expansión aritmética.

Página 32

Page 33: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

3.5.7.- Separación de palabrasLa shell escanea los resultados de la expansión de parámetros, la sustitución de comandos y la expansión aritmética que no ocurren entre dobles comillas para separar palabras.

La shell trata cada carácter de $IFS como un delimitador, y separa los resultados de otras expansiones en palabras mediante estos caracteres. Si la variable IFS no está establecida, o su valor es exactamente <espacio><tabulación><nueva linea>, el valor por defecto, entonces se ignoran las secuencias de <espacio>, <tabulación> y <nueva linea> al principio y al final de los resultados de las expansiones previas, y cualquier secuencia de caracteres del IFS que no estén situados al principio o al final sirven para delimitar palabras. Si IFS tiene algún otro valor distinto al valor por defecto, las secuencias de los caracteres espacio y tabulación son ignoradas al principio y al final de la palabra, siempre que el carácter de espacio en blanco esté en el valor de IFS (un carácter de espacio en blanco de IFS). Cualquier carácter en IFS que no sea espacio en blanco de IFS, junto con cualquier carácter de espacio en blanco adyacente de IFS, delimita un campo. Una secuencia de caracteres de espacio en blanco de IFS también se trata como un delimitador. Si el valor de IFS es nulo, no se realiza la división de palabras. Se mantienen los valores explícitamente nulos (“” o ''). Los argumentos implícitamente nulos no entrecomillados, resultantes de la expansión de parámetros que no tengan valor, son eliminados. Si se expande un parámetro sin valor dentro de comillas dobles, el argumento nulo resultante se mantiene. Advierta que si no se realiza ninguna expansión tampoco hay separación de palabras.

3.5.8.- Expansión de Nombres de Fichero.Tras la separación de palabras, a menos que se haya establecido la opción '-f' (vea la Sección 4.3.1 [El Comando Interno Set]), Bash escanea cada palabra en busca de los caracteres '*', '?' y '['. Si aparece alguno de estos caracteres la palabra es considerada como un patrón, y reemplazada con una lista alfabéticamente ordenada de nombres que se ajustan al patrón. Si no se encuentra ningún nombre concordante con el patrón, y la opción de shell nullglob está deshabilitada, la palabra permanece sin cambios. Si la opción nullglob está establecida, y no se encuentran concordancias, la palabra es eliminada. Si la opción de shell failglob está establecida, y no se encuentran concordancias, se imprime un mensaje de error y el comando no se ejecuta. Si la opción de shell nocaseglob está establecida, se realiza el ajuste sin tener en cuenta la diferencia entre mayúsculas y minúsculas para los caracteres alfabéticos.

Cuando se utiliza un patrón para la expansión de nombres de fichero, el carácter '.' al principio del nombre de archivo o inmediatamente después de una barra inclinada '/' debe concordar siempre de forma explícita, a menos que la opción dotglob esté establecida. Cuando se ajustan nombres de ficheros el carácter barra invertida siempre debe hacerse concordar explícitamente. En otros casos el carácter '.' no se trata de forma especial.

Vea la descripción de shopt en la Sección 4.3.2 [El Comando Interno Shopt] para una descripción de las opciones nocaseglob, nullglob, failglob y dotglob.

La variable de shell GLOBIGNORE se puede utilizar para restringir el juego de nombres de archivo que concuerdan con un patrón. Si GLOBIGNORE está establecida cada nombre concordante que también concuerden con alguno de los patrones contenidos en GLOBIGNORE es eliminado de la lista de concordancias. Los nombres de fichero '.' y '..' son siempre ignorados cuando GLOBIGNORE está establecida y no es nula. Sin embargo, asignar a GLOBIGNORE un valor no

Página 33

Page 34: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

nulo tiene el efecto de activar la opción de shell dotglob, de forma que todos los demás nombres de archivo que comiencen con '.' serán concordantes con el patrón. Para obtener el comportamiento anterior de ignorar los nombres de fichero que comiencen con '.', añada el patrón '.*' a los patrones contenidos en GLOBIGNORE. La opción dotglob se desactiva cuando GLOBIGNORE no está establecido.

3.5.8.1.- Concordancia de Patrones

Cualquier carácter que aparece en un patrón, distinto de los caracteres especiales para patrones descritos más abajo, concuerda con sí mismo. El carácter NUL no puede ocurrir en un patrón. Una barra invertida escapa al carácter que le sigue. La barra invertida de escape es ignorada cuando se realiza el ajuste. Los caracteres especiales para patrones deben ser entrecomillados para que sean ajustados literalmente.

Los caracteres especiales para patrones tienen los siguientes significados.

* 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 xdigitUna 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

Página 34

Page 35: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

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 cEntre '[' 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 más de las ocurrencias 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.

!(lista-patrones)

Concuerda con cualquier cosa que no se ajuste a los patrones dados.

3.5.9.- Eliminación del entrecomillado.Tras las expansiones precedentes, todas las ocurrencias no entrecomilladas de los caracteres '\',''', y '”' que no resultaron de las expansiones anteriores son eliminadas.

3.6.- RedireccionesAntes 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 redi-recció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 asig-nará 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

Página 35

Page 36: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

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 comandols > 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/fdSi fd es un entero válido, el descriptor de fichero fd es duplicado

/dev/stdinSe duplica el descriptor de fichero 0

/dev/stdoutSe duplica el descriptor de fichero 1

/dev/stderrSe duplica el descriptor de fichero 2

/dev/tcp/host/puertoSi 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/puertoSi 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 entradaLa 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

3.6.2.- Redireccionando la salidaLa redirección de la salida produce que el archivo cuyo nombre resulta de la expansión de palabra sea abierto para escritura en el descriptor de fichero n, o la salida estándar (descriptor de fichero 1)

Página 36

Page 37: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

si no se especifica n. Si el fichero no existe se crea; si existe se trunca a tamaño cero.El formato general para redireccionar la salida es:[n]>[|]palabra

Si el operador de redirección es '>' y la opción noclobber del comando interno set está activada, la redirección fallará si el nombre de archivo que resulta de la expansión de palabra existe y es un archivo regular. Si el operador de redirección es '>|' o '>' y la opción noclobber no está activada, la redirección se intenta incluso si el archivo nombrado por palabra existe.

3.6.3.- Anexando la salida redirigidaLa redirección de la salida llevada a cabo de esta forma causa que el archivo cuyo nombre resulta de la expansión de la palabra se abra para anexar (añadir) en el descriptor de fichero n, o la salida estándar (descriptor de fichero 1) si no se especifica el valor de n. Si el archivo no existe se crea.

El formato general para anexar la salida es:[n]>>palabra

3.6.4.- Redirigiendo la Salida Estándar y la Salida de Error EstándarEsta construcción permite que tanto la salida estándar (descriptor de fichero 1) como la salida de error estándar (descriptor de fichero 2) sean redireccionadas al archivo cuyo nombre es la expansión de palabra. Hay dos formatos para redireccionar la salida estándar y la salida de error estándar:

&>palabra

y>&palabra

De las dos formas, es preferible la primera. Esto equivale semánticamente a>palabra 2>&1

3.6.5.- Anexando la Salida Estándar y la Salida de Error Estándar.Esta construcción permite que tanto la salida estándar (descriptor de fichero 1) como la salida de error estándar (descriptor de fichero 2) se anexen al archivo cuyo nombre es la expansión de palabra.

El formato para anexar la salida estándar y la salida de error estándar es:&>>palabra

Esto es semánticamente equivalente a>>palabra 2>&1

3.6.6.- Documentos Internos (Here Documents)Este tipo de redirección ordena a la shell leer la entrada desde la fuente actual hasta encontrar una línea que contenga únicamente a palabra (sin espacios en blanco en los márgenes). Todas las lineas leídas hasta ese punto son luego usadas como entrada estándar para un comando.

El formato es:<<[-]palabra

documento-interno

delimitador

En palabra no se realiza la expansión de parámetros, la sustitución de comandos, la expansión

Página 37

Page 38: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

aritmética o la expansión de nombres de fichero. Si algunos caracteres en palabra están entrecomi-llados, el delimitador es el resultado de la eliminación de entrecomillado en palabra, y no se expanden las líneas en el documento interno. Si palabra no está entrecomillada, todas las líneas del documento interno son sometidas a expansión de parámetros, sustitución de comandos y expansión aritmética. En el último caso, se ignora la secuencia de caracteres \nueva_linea, y se debe usar '\' para entrecomillar los caracteres '\', '$' y '''.

Si el operador de redirección es '<<-' entonces se eliminan todos los caracteres de tabulación marginales de las líneas de entrada y de la línea que contiene a delimitador. Esto permite indentar de forma natural los documentos internos usados en guiones de shell.

3.6.7.- Cadenas Internas (Here strings)Son una variante de los documentos internos, el formato es:

<<< palabra

La palabra es expandida y suministrada al comando en su entrada estándar.

3.6.8.- Duplicando Descriptores de FicheroEl operador de redirección

[n]<&palabra

se utiliza para duplicar descriptores de fichero de entrada. Si palabra se expande a uno o más dígitos, el descriptor de fichero denotado por n es hecho una copia de ese descriptor de fichero. Si los dígitos en palabra no especifican un descriptor de fichero abierto para entrada, se produce un error de redirección. Si palabra se evalúa a '-' se cierra el descriptor de fichero n. Si no se especifica el valor n se utiliza la entrada estándar (descriptor de fichero 0).

El operador[n]>&palabra

se utiliza de forma similar para duplicar los descriptores de fichero de salida. Si no se especifica n se utiliza la salida estándar (descriptor de fichero 1). Si los dígitos en palabra no especifican un 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 FicheroEl 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 escrituraEl operador de redirección

Página 38

Page 39: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

[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.

3.7.- Ejecutando comandos

3.7.1.- Expansión de un comando simpleCuando se ejecuta un comando único la shell realiza las siguientes expansiones, asignaciones y redirecciones de izquierda a derecha.

1. Las palabras que el analizador ha marcado como asignaciones de variables (las que preceden al nombre de comando) y las redirecciones se guardan para su posterior procesado.

2. Las palabras que no son asignaciones de variables o redirecciones se expanden (vea la Sección 3.5 [Expansiones de la Shell]). Si queda alguna palabra tras la expansión, la primera palabra se toma como el nombre del comando y el resto de palabras son los argumentos.

3. Las redirecciones se realizan como se describió anteriormente (vea la Sección 3.6 [Redirec-ciones]).

4. El texto después del '=' en cada asignación de variable sufre expansión de tilde, expansión de parámetros, sustitución de comandos, expansión aritmética y eliminación de entrecomi-llado antes de ser asignado a la variable.

Si no se obtiene ningún nombre de comando, la asignación de variables afectará al entorno actual de la shell. En caso contrario, las variables se añaden al entorno del comando ejecutado y no afectan al entorno actual de la shell. Si alguna de las asignaciones intenta asignar un valor a una variable de sólo lectura se produce un error y el comando termina con un estado distinto de cero.

Si no se obtiene ningún nombre de comando, se llevan a cabo las redirecciones, pero no afectan al entorno actual de la shell. Un error de redirección provoca que el comando finalice con un estado distinto de cero.

Si queda algún nombre de comando tras la expansión, se procede a su ejecución como se describe más abajo. En caso contrario el comando finaliza. Si una de las expansiones contenían una sustitución de comandos, el estado de salida del comando es el estado de salida de la última sustitución de 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 ComandosDespué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 incli-nadas, Bash busca en cada elemento de $PATH un directorio conteniendo un archivo ejecu-table con ese nombre. Bash usa una tabla hash para recordar la ruta completa de los archivos

Página 39

Page 40: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

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 argu-mentos 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 ComandosLa 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.• 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.

Página 40

Page 41: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

• 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.- EntornoCuando 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.

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.

Página 41

Page 42: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

3.7.5.- Estados de SalidaEl 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ñalesCuando 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'.

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

Página 42

Page 43: manual de Bash 4.1

Capitulo 3: Características Básicas del Shell

sesión interactiva finaliza.Si Bash está esperando a que un comando finalice y recibe una señal para la cual tiene estable-

cida una trampa, la trampa no se ejecutará hasta que el comando finalice. Cuando Bash está espe-rando 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.

3.8.- Guiones de ShellUn guión de shell es un archivo de texto que contiene comandos de shell. Cuando se usa este tipo de fichero como el primer argumento no opción en la invocación de Bash y no se suministran ni la opción '-c' ni la '-s' (vea la Sección 6.1 [Invocando a Bash]), Bash lee y ejecuta comandos del fichero y luego finaliza. Este modo de operación crea una shell no interactiva. La shell busca primero el fichero en el directorio actual y después en los directorios de $PATH si no lo encuentra allí.

Cuando Bash ejecuta un guión de shell, este establece el parámetro especial 0 al nombre del fichero, en vez de al nombre de la shell, y el resto de argumentos, si se da alguno, se asignan a los parámetros posicionales. Si no se proporcionan argumentos adicionales, se desactivan los parámetros posicionales.

Un guión de shell se puede convertir en ejecutable usando el comando chmod para activar el bit de ejecución. Si Bash encuentra este tipo de ficheros mientras busca un comando en $PATH, este genera una subshell para ejecutarlo. En otras palabras, ejecutar

nombre_de_archivo argumentos

es equivalente a ejecutarbash nombre_de_archivo argumentos

Si el nombre_de_archivo es un guión de shell ejecutable. Este subshell se reinicializa a sí mismo, de forma que el efecto es como si se hubiese invocado una nueva shell para interpretar el guión, con la excepción de que las localizaciones de comandos recordadas por el padre (vea la descripción de hash en la Sección 4.1 [Comandos Internos de la Shell Bourne]) se mantienen en el hijo.

La mayoría de las versiones de Unix hacen de esto una parte del mecanismo de ejecución de comandos del sistema operativo. Si la primera línea de un guión comienza con los caracteres '#!', el resto de la línea especifica un intérprete para el programa. Esto es, usted puede especificar Bash, awk, Perl o algún otro intérprete y escribir el resto del guión en ese lenguaje.

Los argumentos para el interprete consisten en un único argumento opcional a continuación del nombre del interprete en la primera línea del archivo del guión, seguido por el nombre del archivo de guión, seguido por el resto de los argumentos. Bash realizará esta acción en sistemas operativos que no manejan esto por sí mismos. Advierta que algunas versiones antiguas de Unix limitan el nombre del intérprete y los argumentos a un máximo de 32 caracteres.

Los guiones de Bash a menudo comienzan con #! /bin/bash (asumiendo que Bash ha sido instalado en '/bin'), puesto que esto asegura que Bash será usado para interpretar el guión, incluso si es ejecutado bajo cualquier otra shell.

Página 43

Page 44: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

4.- Comandos Internos de la ShellLos comandos internos están contenidos dentro de la propia shell. Cuando se usa el nombre de un comando interno como la primera palabra de un comando único (vea la Sección 3.2.1 [Comandos Únicos]), la shell ejecuta el comando directamente, sin invocar a ningún otro programa. Los comandos internos son necesarios para implementar funcionalidades que son imposibles o poco prácticas de obtener con utilidades separadas.

Esta sección describe resumidamente tanto los comandos internos que Bash hereda de la Shell Bourne como los comandos internos que son exclusivos o que han sido extendidos en Bash.

Varios comandos internos se describen en otros capítulos: comandos internos que proporcionan la interfaz de Bash para las características de control de tareas (vea la Sección 7.2 [Comandos Internos para el Control de Tareas]), la pila de directorios (vea la Sección 6.8.1 [Comandos Internos para la Pila de Directorios]), la historia de comandos (vea la Sección 9.2 [Comandos Internos para la Historia de Comandos]) y las características de completado programable (vea la Sección 8.7 [Comandos Internos para el Completado Programable]).

Muchos de los comandos internos han sido extendido por POSIX o Bash.A menos que se especifique lo contrario, cada comando interno que se indique que acepta las

opciones precedidas por '-' aceptará '--' para indicar el fin de la lista de opciones. Los comandos internos :, true, false y test no aceptan opciones y no tratan el '--' de forma especial. Los comandos internos exit, logout, break, continue, let y shift aceptan y procesan argumentos que comienzan con '-' sin necesidad del '--'. Otros comandos internos que aceptan argumentos pero que no se especifica que acepten opciones interpretan los argumentos que comienzan con '-' como una opción inválida y requieren el uso de '--' para prevenir tal interpretación.

4.1.- Comandos Internos de la Shell BourneEsta sección describe los comandos internos que son heredados de la Shell Bourne. Estos comandos se implementan como se especifica por el estándar POSIX.

: (dos puntos):[argumentos]

No hace nada más que expandir los argumentos y realizar las redirecciones. El estado de retorno es cero.

. (un punto).nombre_de_archivo [argumentos]

Lee y ejecuta los comandos del argumento nombre_de_archivo en el contexto actual de la shell. Si nombre_de_archivo no contiene un barra inclinada, se utiliza la variable PATH para encontrar a nombre_de_archivo. Cuando Bash no se encuentra en modo POSIX, si el nombre_de_archivo no se encuentra en $PATH busca en el directorio actual . Si se suministran argumentos adicionales estos se convierten en parámetros posicionales cuando se ejecuta nombre_de_archivo. En caso contrario los parámetros posicionales no son alterados. El estado de retorno es el estado de salida del último comando ejecutado, o cero si no se ejecutó ningún comando. Si no se encuentra nombre_de_archivo o no puede ser leído, el estado de retorno es distinto de cero. Este comando interno es equivalente a source.

Página 44

Page 45: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

breakbreak[n]

Sale de un bucle for, while, until o select. Si se suministra n, se sale del bucle de nivel n. n debe ser mayor o igual que 1. El estado de retorno es cero a menos que n no sea mayor o igual que 1.

cdcd [-L|-P] [directorio]

Cambia el directorio de trabajo actual a directorio. Si no se suministra directorio se utiliza el valor de la variable de la shell HOME. Si existe la variable de shell CDPATH, esta se usa como una ruta de búsqueda. Si directorio comienza con una barra invertida no se utiliza CDPATH. La opción '-P' significa que no se deben seguir a los enlaces simbólicos; Los enlaces simbólicos se siguen por defecto o si se utiliza la opción '-L'. Si el directorio es '-', esto equivale a $OLDPWD. Si se utiliza un nombre de directorio no vacío procedente de CDPATH o si '-' es el primer argumento y el cambio de directorio se realiza con éxito, se escribe en la salida estándar la ruta absoluta del nuevo directorio de trabajo.

El estado de retorno es cero si el cambio de directorio tiene éxito y distinto de cero en caso contrario.

continuecontinue [n]

Reanuda la siguiente iteración de un bucle for, while, until o select. Si se suministra n, se reanuda la ejecución del bucle de nivel n. n debe ser mayor o igual a 1. El estado de retorno es cero a menos que n no sea mayor o igual que 1.

evaleval [argumentos]

Los argumentos se concatenan juntos en un único comando, que luego se lee y ejecuta, y su estado de salida se devuelve como el estado de salida de eval. Si no hay argumentos o sólo se proporcionan argumentos vacíos, el estado de retorno es cero.

execexec [-cl] [-a nombre] [comando [argumentos]]

Si se suministra comando, este reemplaza la shell sin crear un nuevo proceso. Si se suministra la opción '-l' la shell pone un guión al comienzo del argumento número 0 que se pasa al comando. Esto es lo que hace el programa de inicio de sesión. La opción '-c' produce que el comando se ejecute en un entorno vacío. Si se suministra '-a' la shell pasa el nombre como el argumento 0 del comando. Si no se especifica ningún comando se pueden usar las redirecciones para afectar al entorno de shell actual. Si no hay errores de redirección, el estado de retorno es cero; en caso contrario el estado de retorno es distinto de cero.

exitexit [n]

Hace que la shell finalice, devolviendo un estado n al padre de la shell. Si se omite n el estado de salida es el estado de salida del último comando ejecutado. Cualquier trampa

Página 45

Page 46: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

en EXIT se ejecuta antes de que la shell finalice.

exportexport [-fn] [-p] [nombre[=valor]]

Marca cada nombre para ser pasado a los procesos hijos en el entorno. Si se suministra la opción '-f', los nombres se refieren a funciones de shell; en caso contrario los nombres se refieren a variables de shell. La opción '-n' significa que se debe dejar de marcar cada nombre dado para exportar. Si no se suministran nombres o si se pasa la opción '-p', se muestra una lista de nombres exportados. La opción '-p' muestra la salida de forma que puede ser reutilizada como entrada. Si un nombre de variable es seguido por =valor, el valor de la variable se establece en valor.

El estado de retorno es cero a menos que se suministre alguna opción inválida, que alguno de los nombres no sea un nombre de variable de shell válida o que se propor-cione la opción '-f' con un nombre que no sea una función de shell.

getoptsgetopts cadena_de_opciones nombre [args]

getopts se utiliza en los guiones de shell para analizar los parámetros posicionales. La cadena_de_opciones contiene los caracteres de opción que deben ser reconocidos; si un carácter es seguido por un signo de dos puntos, se espera que la opción tenga un argumento, el cual debe estar separado de esta por un espacio. El dos puntos (':') y la interrogación de cierre ('?') no se pueden usar como caracteres de opción. Cada vez que se invoca, getopts sitúa la siguiente opción en la variable de shell nombre, inicializando nombre si este no existe, y el índice al siguiente argumento a ser procesado dentro de la variable OPTIND. OPTIND se inicializa a 1 cada vez que se invoca a la shell o a un guión de shell. Cuando una opción requiere un argumento, getopts sitúa ese argumento en la variable OPTARG. La shell no reinicia OPTIND automáticamente; este se debe reiniciar manualmente entre las múltiples llamadas a getopts dentro de la misma invocación de shell si se va a usar un nuevo juego de parámetros.

Cuando se encuentra el final de las opciones, getopts sale con un valor de retorno mayor que cero. OPTIND se ajusta al índice del primer argumento que no sea una opción y nombre se ajusta a '?'.

getopts normalmente analiza los parámetros posicionales, pero si se dan más argu-mentos en args, getopts analiza estos en su lugar.

getopts puede informar de errores de dos formas. Si el primer carácter de la cadena_de_opciones es un dos puntos, se utiliza el informe de errores silencioso. En el modo normal de funcionamiento de la shell se imprimen mensajes de diagnóstico cuando se encuentran opciones inválidas o faltan argumentos de opción Si la variable OPTERR está establecida a 0, no se mostraran mensajes de error, incluso si el primer carácter de cadena_de_opciones no es un dos puntos.

Si se encuentra una opción inválida, getopts sitúa '?' en nombre y, si no es silencioso, imprime un mensaje de error y OPTARG se anula. Si getopts es silencioso, el carácter de opción encontrado se sitúa en OPTARG y no se imprime ningún mensaje de diagnóstico.

Página 46

Page 47: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

Si no se encuentra un argumento obligatorio, y getopts no es silencioso, se sitúa una marca de interrogación de cierre ('?') en nombre, se elimina OPTARG, y se imprime un mensaje de diagnóstico. Si getopts es silencioso, entonces se sitúa un dos puntos (':') en nombre y OPTARG toma al carácter de opción encontrado.

hashhash [-r] [-p nombre_de_archivo] [-dt] [nombre]

Recuerda las rutas completas de los comandos especificados como argumentos nombre, de forma que estos no necesitan ser buscados en las siguientes invocaciones. Los comandos se encuentran buscando a través de los directorios listados en $PATH. La opción '-p' inhibe la búsqueda de rutas, y se utiliza nombre_de_archivo como la localización de nombre. La opción '-r' produce que la shell olvide todas las localizaciones registradas. La opción '-d' produce que la shell olvide las rutas registradas para cada nombre. Si se suministra la opción '-t' se imprime la ruta completa correspondiente a cada nombre. Si se proporcionan múltiples argumentos nombre con la opción '-t' el nombre se imprime antes de las rutas completas. La opción '-l' produce que la salida sea mostrada en un formato que pueda ser reutilizado como entrada. Si no se dan argumentos o si sólo se suministra '-l' se imprime la información sobre los comandos registrados. El estado de retorno es cero a menos que no se encuentre a nombre o se suministre una opción inválida.

pwdpwd [-LP]

Imprime la ruta absoluta del directorio de trabajo actual. Si se proporciona la opción '-P' la ruta imprimida no contendrá enlaces simbólicos. Si se suministra la opción '-L', la ruta imprimida puede contener enlaces simbólicos. El estado de retorno es cero a menos que se encuentre un error mientras se determina el nombre del directorio actual o que se proporcione una opción inválida.

readonlyreadonly [-aApf] [nombre[=valor]] …

Marca cada nombre como de sólo lectura. Los valores de estos nombres no pueden ser modificados en posteriores asignaciones. Si se proporciona la opción '-f' los nombres se refieren a funciones de shell. La opción '-a' significa que cada nombre se refiere a una variable de tipo array indexado; la opción '-A' significa que cada nombre se refiere a una variable de tipo array asociativo. Si no se proporcionan argumentos nombre, o si se suministra la opción '-p', se imprime la lista de todos los nombres de sólo lectura. La opción '-p' produce que la salida sea mostrada en un formato que pueda ser reutilizado como entrada. Si un nombre de variable es seguido por =valor, el valor de la variable es puesto a valor. El estado de retorno es cero a menos que se proporcione una opción inválida o que uno de los argumentos nombre no sea un nombre de variable o función de shell válidos, o que se proporcione la opción '-f' con un nombre que no es una función de shell.

Página 47

Page 48: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

returnreturn [n]

Produce que una función de shell finalice con el valor de retorno n. Si no se suministra n, el valor de retorno es el estado de salida del último comando ejecutado en la función. Esto también se puede utilizar para terminar la ejecución de un guión que está siendo ejecutado con el comando interno . (o source), devolviendo bien n o bien el estado de salida del último comando ejecutado dentro del guión como estado de salida del guión de comandos. Cualquier comando asociado con la trampa RETURN se ejecuta antes de que la ejecución continúe tras la función o el guión de comandos. El estado de retorno es distinto de cero si return se utiliza fuera de una función y no estamos ejecutando un guión de comandos con . o source.

shiftshift [n]

Desplaza los parámetros posicionales a la izquierda en n posiciones. Los parámetros posicionales desde n+1 … $# son renombrados a $1 … $#-n. Los parámetros repre-sentados por los números $# hasta $#-n+1 se anulan. n debe ser un número no negativo menor o igual a $#. Si n es cero o mayor que $#, los parámetros posicionales no se modifican. Si no se proporciona el valor n, se asume que es igual a 1. El estado de retorno es cero a menos que n sea mayor que $# o menor que cero y cero en caso contrario.

test

[test expr o [ expr ]

Evalúa una expresión condicional expr. Cada operador y operando debe ser un argu-mento 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 puede ser usado 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.

Página 48

Page 49: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

Los comandos internos test y [ evalúan expresiones condicionales usando un juego de reglas basado en el número de argumentos.

0 argumentosLa expresión es falsa

1 argumentoLa expresión es verdadera si y sólo si el argumento no es nulo.

2 argumentosSi 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 opera-dores 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 argumentosSi 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.

4 argumentosSi 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 argumentosLa expresión es analizada y evaluada de acuerdo a la precedencia usando las reglas listadas anteriormente.

timestimes

Imprime el tiempo de usuario y de sistema usado por la shell y sus hijos. El estado de retorno es cero.

traptrap [-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

Página 49

Page 50: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

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.

El estado de retorno es cero a menos que algún sigspec no especifique una señal válida.

umaskumask [-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.

Página 50

Page 51: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

unsetunset [-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.

4.2.- Comandos Internos de BashEsta sección describe los comandos internos que son únicos o han sido extendidos en Bash.

Algunos de estos comandos son especificados en el estandar POSIX.

aliasalias [-p] [nombre[=valor] …]

Sin argumentos o con la opción '-p', alias imprime la lista de alias en la salida estándar en un formato que permite que sea reutilizado como entrada. Si se suministran argumentos, se define un alias para cada nombre cuyo valor sea dado. Si no se da ningún valor, se imprime el nombre y el valor del alias. Los alias se describen en la sección 6.6 [Alias]

bindbind [-m mapaTeclas] [-lpsvPSV]bind [-m mapaTeclas] [-q funcion] [-u funcion][-r secTeclas]bind [-m mapaTeclas] -f nombre_de_archivobind [-m mapaTeclas] -x secTeclas:comando-shellbind [-m mapaTeclas] secTeclas:nombre_funcionbind comando-Readline

Muestra las asociaciones de teclas y funciones de Readline (vea el Capítulo 8 [Edición de la Línea de Comandos]), asocia una secuencia de teclas a una función de Readline o a una macro, o establece una variable de Readline. Cada argumento no opción es un comando como podría aparecer en un archivo de inicialización de Readline (vea la Sección 8.3 [Archivo de inicialización de Readline]), pero cada asociación o comando debe ser pasado como un argumento separado; por ejemplo, '“\C-x\C-r”:re-read-init-file'.

Las opciones, si son suministradas, tienen los siguientes significados:

-m mapaTeclas

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ágina 51

Page 52: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

-p Muestra los nombres de las funciones de Readline y las asociaciones de tal forma que puede ser usado 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.

builtinbuiltin [comando-interno [args]]

Ejecuta un comando interno de la shell, le pasa args y devuelve su estado de salida. Esto 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

Página 52

Page 53: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

interno de la shell.

callercaller [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.

commandcommand [-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.

declaredeclare [-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á

Página 53

Page 54: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

el nombre del archivo fuente y el número de línea donde se define la función. '-F' implica a '-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 arit-mé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'.

Página 54

Page 55: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

echoecho [-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 determinar dinámicamente cuando un echo expande estas cadenas de caracteres por defecto o no. echo no interpreta '--' como el fin de las opciones.

echo interpreta las siguientes secuencias de escape:

\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.

enableenable [-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

Página 55

Page 56: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

'-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.

helphelp [-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.

letlet 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.

locallocal [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.

logoutlogout [n]

Finaliza un shell de inicio de sesión devolviendo un estado igual a n al padre de la shell.

mapfilemapfile [-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

Página 56

Page 57: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

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 por salto. La opción -c especifica el valor del salto.

-c Especifica el número de líneas leídas entre cada llamada a llamada_de_retorno.

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.

printfprintf [-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 printf 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 printf 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

Página 57

Page 58: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

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.

readread [-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 se suministre un descriptor de fichero inválido como argumento para '-u'.

Las opciones, si son suministradas, tienen los siguientes significados:

-a anombre

Se asignan las palabras a índices secuenciales de la variable de tipo array anombre, empezando por 0. Se eliminan todos los elementos de anombre antes de la asignación. El resto de argumentos nombre son ignorados.

-d delim

Se utiliza el primer carácter de delim para terminar la línea de entrada en lugar de la nueva_línea.

-e Se utiliza Readline para obtener la línea (vea el Capítulo 8 [Edición de la Línea de Comandos]). Readline usa los ajustes de edición actuales (o los ajustes por defecto, si la edición no fue activada previamente).

-i texto

Si se está utilizando Readline para leer la línea, se sitúa texto dentro del buffer de edición antes de que la edición comience.

-n ncarac

read retorna tras leer ncarac caracteres en vez de esperar a leer una línea completa de la entrada, pero si encuentra un delimitador regresa aunque se hayan leído menos de ncarac caracteres antes del delimitador.

-N ncarac

read retorna tras leer exactamente ncarac caracteres en vez de esperar por una línea completa de entrada, a menos que se encuentre EOF o el tiempo expire. Los caracteres delimitadores encontrados en la entrada no son

Página 58

Page 59: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

tratados de forma especial y no provocan que read regrese hasta que se leen ncarac caracteres.

-p prompt

Muestra prompt sin una nueva_línea marginal, antes de intentar leer cualquier entrada. El prompt se muestra sólo si la entrada proviene de una terminal.

-r Si se da esta opción, la barra invertida no actúa como un carácter de escape. La barra invertida se considera parte de la línea. En particular, no se puede utilizar un par barra invertida-nueva_línea como continuación de línea.

-s Modo silencioso. Si la entrada proviene de un terminal, los caracteres introducidos no son mostrados.

-t temporizador

Provoca que read expire y devuelva un fallo si no se ha completado la lectura de una línea antes de temporizador segundos. temporizador puede ser un número decimal con una parte fraccionaria siguiendo al punto decimal. Esta opción sólo es efectiva si read está leyendo la entrada desde un terminal, una tubería o un archivo especial; no tiene efecto cuando está leyendo de archivos regulares. Si temporizador es 0, read retorna con éxito si la entrada está disponible en el descriptor de fichero especificado, y falla en caso contrario. El estado de salida es mayor que 128 si se excede a temporizador.

-u fd lee la entrada desde el descriptor de archivo fd.

readarrayreadarray [-n cantidad] [-O origen] [-s cantidad] [-t] [-u

fd] [-C llamada_de_retorno] [-c salto] [array]

Lee líneas desde la entrada estándar y las introducen en la variable de tipo array indexado array, o desde el descriptor de fichero fd si se suministra la opción '-u'

Es un sinónimo para mapfile.

sourcesource filename

Un sinonimo para . (vea la Seccion 4.1 [Comandos Internos de la Shell Bourne]).

typetype [-afptP] [nombre …]

Para cada nombre, indica cómo se debe interpretar este si es usado como un nombre de comando.

Si se usa la opción '-t', type imprime una única palabra que es una de las siguientes: 'alias', 'function', 'builtin', 'file' o 'keyword', si nombre es un alias, una función de shell, un comando interno de la shell, un archivo del disco, o una palabra reservada de la shell respectivamente. Si no se encuentra nombre entonces no se imprime nada y type

Página 59

Page 60: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

devuelve un estado de error.

Si se usa la opción '-p', type devuelve o el nombre del archivo de disco que se ejecutaría si se especificara nombre o nada si la opción '-t' no devolviera 'file'.

La opción '-P' fuerza una búsqueda de ruta para cada nombre, incluso si la opción '-t' no devolviera 'file'.

Si un comando está en la tabla hash '-p' y '-P' imprimen el valor de la tabla, no nece-sariamente el archivo que aparece primero en $PATH.

Si se utiliza la opción '-a' type devuelve todos los lugares que contienen un ejecutable llamado nombre. Esto incluye alias y funciones, si y sólo si no se usa también la opción '-p'

Si se usa la opción '-f', type no intenta encontrar las funciones de shell, como con el comando interno builtin.

El estado de retorno es cero si se encuentran todos los nombres y distinto de cero si alguno de ellos no se encuentra.

typesettypeset [-afFrxi] [-p] [nombre[=valor] …]

El comando typeset se suministra por compatibilidad con la shell Korn; sin embargo, ha sido despreciado en favor del comando interno declare.

ulimitulimit [-abcdefilmnpqrstuvxHST] [límite]

ulimit proporciona control sobre los recursos disponibles por los procesos iniciados por la shell, en sistemas que permiten dicho control. Si se da una opción esta es interpretada como sigue:

-S Carga e informa de los límites blandos asociados con un recurso.

-H Carga e informa de los límites duros asociados con un recurso.

-a Se informa de todos los límites actuales.

-b El tamaño máximo del buffer socket

-c El tamaño máximo de los archivos de volcado de memoria (cores) creados.

-d El tamaño máximo del segmento de datos de un proceso.

-e La prioridad máxima de planificación (“nice”).

-f El tamaño máximo de los archivos escritos por la shell y sus hijos.

-i El número máximo de señales pendientes

-l El tamaño máximo que puede ser bloqueado en memoria.

-m El tamaño máximo del conjunto residente (muchos sistemas no obedecen a este límite).

-n El número máximo de descriptores de fichero abiertos (muchos sistemas no permiten establecer este valor).

Página 60

Page 61: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

-p El tamaño del buffer de tuberías.

-q El número máximo de bytes en las colas de mensajes POSIX.

-r La prioridad máxima de planificación de tiempo real.

-s El tamaño máximo de la pila.

-t La cantidad máxima de tiempo de cpu en segundos

-u El número máximo de procesos disponibles para un único usuario.

-v La cantidad máxima de memoria virtual disponible para el proceso.

-x El número máximo de archivos bloqueados.

-T El número máximo de hebras.

Si se da límite este es el nuevo valor del recurso especificado; Se pueden usar los valores de límites especiales hard, soft y unlimited para índicar los valores actuales del límite duro, del límite blando y sin límite respectivamente. Un límite duro no puede ser incrementado por un usuario no-root una vez que está establecido; un límite blando puede ser incrementado hasta el valor del límite duro. De otro modo, se imprime el valor actual del límite blando para el recurso especificado, a menos que se suministre la opción '-H'. Cuando establecemos nuevos límites, si no se suministra la opción '-H' ni la opción '-S', se establece tanto el límite duro como el límite blando. Si no se da ninguna opción, entonces se asume la opción '-f'. Los valores se dan en incrementos de 1024-bytes excepto con la opción '-t' para la cual se dan en segundos, '-p para la cual se dan en bloques de 512-bytes y para '-n' y '-u' que usan valores sin escala.

El estado de retorno es cero a menos que se de una opción o un argumento inválidos, o que ocurra algún error mientras se establece el nuevo límite.

unaliasunalias [-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].

4.3.- Modificando el Comportamiento de la Shell.

4.3.1.- El comando Interno SetEste comando interno es tan complicado que se merece su propia sección. set le permite cambiar los valores de las opciones de la shell y establecer parámetros posicionales, o mostrar los nombres y los valores de las variables de la shell.

setset [--abefhkmnptuvxBCEHPT] [-o opción] [argumento …]set [+abefhkmnptuvxBCEHPT] [+o opción] [argumento …]

Si no se pasan opciones o argumentos, set muestra los nombres y valores de todas las variables y funciones de la shell, ordenadas de acuerdo a la localización actual, en un formato que puede ser reutilizado como entrada para establecer o reiniciar las variables establecidas actualmente. Las variables de sólo lectura no pueden ser reiniciadas. En

Página 61

Page 62: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

modo POSIX, sólo se listan las variables de shell.

Cuando se suministran opciones, estas establecen o quitan atributos de la shell. Las opciones, si se especifican, tienen los significados siguientes:

-a Marca las variables y funciones que están modificadas o creadas para exportar al entorno de los siguientes comandos.

-b Produce que se reporte inmediatamente el estado de terminación de las tareas en segundo plano, en vez de antes de imprimir el siguiente prompt primario.

-e Sale inmediatamente si una tubería (vea la Sección 3.2.2 [Tuberías]), que puede consistir en un único comando simple (vea la Sección 3.2.1 [Comandos Simples]), un comando de subshell encerrado entre paréntesis (vea la Sección 3.2.4.3 [Agrupación de Comandos]) o uno de los comandos ejecutados como parte de una lista de comandos encerrados entre llaves (vea la Sección 3.2.4.3 [Agrupación de Comandos]) devuelve un estado distinto de cero. La shell no sale si el comando que falla es parte de una lista de comandos inmediatamente posterior a una palabra clave while o until, parte de una comprobación en una sentencia if, parte de cualquier comando ejecutado en una lista && o || excepto el comando que sigue al último && o ||, cualquier comando en una tubería menos el último, o si el estado de retorno del comando está siendo invertido con !. Si está establecida una trampa sobre ERR, esta se ejecuta antes de que la shell finalice.Esta opción se aplica al entorno de la shell y a cada entorno de subshell aisladamente (vea la Sección 3.7.3 [Entorno de Ejecución de Comandos]), y puede causar que las subshells finalicen antes de ejecutar todos los comandos.

-f Desactiva la expansión de nombres de fichero (globalmente).

-h Localiza y recuerda (mediante una tabla hash) los comandos después de que 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:

Página 62

Page 63: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

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 finaliza con un estado distinto de cero, o cero si todos los comandos en la tubería finalizan con éxito. Esta opción está desactivada por defecto.

posix Cambia el comportamiento de Bash en las operaciones que por defecto difieren del estándar POSIX para ajustarse al estándar (vea la Sección 6.11 [El Modo POSIX de Bash]). Esto se hace con la intención de hacer que Bash llegue a ser un superconjunto estricto de ese

Página 63

Page 64: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

estándar.

privileged como -p.

verbose como -v.

vi Utiliza una interfaz de edición de líneas al estilo vi. Esto también afecta a la interfaz de edición usada con read -e.

xtrace como -x.

-p Activa el modo privilegiado. En este modo, los archivos $BASH_ENV y $ENV no son procesados, las funciones de la shell no son heredadas desde el entorno, y las variables SHELLOPTS, BASHOPTS, CDPATH y GLOBIGNORE, si estas aparecen en el entorno, son ignoradas. Si la shell es iniciada con el id de usuario (grupo) efectivo distinto al id de usuario (grupo) real, y no se suministra la opción -p, se toman estas acciones y el id de usuario efectivo es ajustado al valor del id de usuario real. Si la opción -p se suministra al inicio, no se restablece el id de usuario efectivo. Desactivar esta opción produce que los ids de usuario y de grupo efectivos sean ajustados a los ids de usuario y grupo reales.

-t Finaliza después de leer y ejecutar un comando.

-u Cuando se realiza la expansión de parámetros trata las variables y parámetros no definidos distintos de los parámetros especiales '@' o '*' como un error. Se escribirá un mensaje de error en la salida de error estándar, y una shell no-interactiva finalizará.

-v Imprime las líneas de entrada de la shell tal cómo son leídas.

-x Imprime una traza de los comandos simples, los comandos for, los comandos select y los comandos aritméticos for y sus argumentos o listas de palabras asociadas después de que estos sean expandidos y antes de que sean ejecutados. Se expande el valor de la variable PS4 y el valor resultante se imprime delante del comando y sus argumentos expandidos.

-B La shell realizará expansión de llaves (vea la Sección 3.5.1 [Expansión de llaves]). Esta opción está activa por defecto.

-C Evita que la redirección de salida usando '>', '>&' y '<>' sobreescriba archivos existentes.

-E Si está establecida, cualquier trampa en ERR es heredada por las funciones de la shell, las sustituciones de comandos, y los comandos ejecutados en un entorno de subshell. La trampa ERR normalmente no es heredada en tales 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

Página 64

Page 65: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

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.

4.3.2.- El Comando Interno ShoptEste comando interno le permite cambiar un comportamiento adicional opcional de la shell.

shoptshopt [-pqsu] [-o] [nombreopt …]

Conmuta los valores de las variables que controlan el comportamiento opcional de la shell. Sin opciones o con la opción '-p' muestra una lista de todas las opciones que permiten ser ajustadas, con una indicación de cuales están establecidas y cuales no. La opción '-p' produce que la salida sea mostrada en un formato que permite ser

Página 65

Page 66: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

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-

Página 66

Page 67: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

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 inter-venga un comando (vea el Capítulo 7 [Control de Tareas]). La shell siempre retrasa la salida si existen tareas detenidas.

checkwinsize

Si está establecida, Bash comprueba el tamaño de ventana después de cada comando y, si es necesario, actualiza el valor de LINES (líneas) y COLUMNS (columnas).

cmdhist

Si está establecida, Bash intenta guardar todas las líneas de un comando multilínea en la misma entrada de la historia. Esto permite reeditar fácil-mente los comandos multilínea.

compat31

Si está activada, Bash cambia su comportamiento con respecto a los argumentos entrecomillados para el operador de comandos condicionales '=~' al de la versión 3.1.

dirspell

Si está establecida, Bash intenta correcciones en el deletreo de los nombres de directorio durante el completado de palabras si el nombre de directorio suministrado inicialmente no existe.

dotglob

Si está establecida Bash incluye los nombres de archivo que comienzan con un '.' en los resultados de la expansión de nombres de archivo.

execfail

Si esta opción está establecida, una shell no interactiva no finalizará si no puede ejecutar el archivo especificado como argumento al comando interno exec. Una shell interactiva no finaliza si exec falla.

expand_aliases

Si está establecida, los alias se expanden como se describe más abajo, en la Sección 6.6 [Alias]). Esta opción está activada por defecto para las shells interactivas.

extdebug

Si está establecida, se activa el comportamiento previsto para usar con depu-radores:

1. La opción '-F' pasada al comando interno declare (vea la Sección 4.2 [Comandos Internos de Bash]) muestra el nombre del archivo fuente y el número de línea correspondiente a cada nombre de función suministrada como un argumento.

2. Si el comando ejecutado por la trampa DEBUG devuelve un valor distinto de cero, el siguiente comando se ignora y no se ejecuta.

3. Si el comando ejecutado por la trampa DEBUG devuelve un valor de 2

Página 67

Page 68: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

y la shell está ejecutando una subrutina (una función de shell o un guión de comandos ejecutado mediante los comandos internos . o source), se simula una llamada a return.

4. Se actualizan las variables BASH_ARGC y BASH_ARGV como se describe en sus correspondientes descripciones (vea la Sección 5.2 [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 directorio 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.

Página 68

Page 69: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

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 completado de los nombres de anfitrión cuando se esté completando una palabra que contenga un '@' (vea la Sección 8.4.6 [Comandos para completado]). Esta opción está activada por defecto.

huponexit

Si está establecida, Bash enviará SIGHUP a todas las tareas cuando una shell de inicio de sesión interactivo finalice (vea la Sección 3.7.6 [Señales]).

interactive_commentsPermite que una palabra que comience con '#' provoque que esa palabra y todas las que le sigan en la misma línea sean ignoradas en una shell interac-tiva. Esta opción está activada por defecto.

lithist

Si está activada, y la opción cmdhist también está activada, los comandos de líneas múltiples se guardan en la historia con las nuevas líneas embebidas en vez de usar operadores punto y coma, cuando esto sea posible.

login_shell

La shell establece esta opción si es iniciada como una shell de inicio de sesión (vea la Sección 6.1 [Invocando Bash]). Su valor no se puede cambiar.

mailwarn

Si está establecida, y un archivo que Bash está comprobando en busca de correo ha sido accedido desde la última vez que se buscó, se muestra el mensaje “The mail in mailfile has been read” (el correo en el archivo ha sido leido).

no_empty_cmd_completion

Si está establecida, y se está usando Readline, Bash no intentará buscar en el PATH los valores de completados posibles cuando se intenta completar en una línea vacía.

nocaseglob

Si está establecida, Bash realiza la expansión de los nombres de archivo de forma que no diferencia entre mayúsculas y minúsculas.

nocasematch

Si está establecida, Bash ajusta los patrones de forma que no diferencia

Página 69

Page 70: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

entre mayúsculas y minúsculas cuando busca las concordancias durante la ejecución de los comandos condicionales case o [[.

nullglob

Si está establecida, Bash permite a los patrones de nombre de archivo que no concuerdan con ningún fichero expandirse a la cadena nula en vez de permanecer como ellos mismos.

progcomp

Si está establecida, las características de completado programable (vea la Sección 8.6 [Completado Programable] estarán activadas. Esta opción está activada por defecto.

promptvars

Si está establecida, las cadenas de prompt sufren expansión de parámetros, sustitución de comandos, expansión aritmética y eliminación de entrecomi-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 argu-mento. 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.

4.4.- Comandos Internos EspecialesPor razones históricas, el estándar POSIX ha clasificado varios comandos internos como especiales. Cuando Bash se está ejecutando en modo POSIX, los comandos internos especiales se diferencian del resto de comandos en tres aspectos:

1. Los comandos especiales se encuentran antes que las funciones de shell durante la búsqueda de comandos.

Página 70

Page 71: manual de Bash 4.1

Capítulo 4: Comandos Internos de la Shell

2. Si un comando interno especial devuelve un estado de error, una shell no interactiva se cerrará.

3. Las sentencias de asignación que precedan al comando permanecen en efecto en el entorno de la shell después de que el comando finalice.

Cuando Bash no se está ejecutando en modo POSIX, estos comandos internos no se comportan de forma diferente al resto de comandos internos de Bash. El modo POSIX de Bash se describe en la Sección 6.11 [Modo POSIX de Bash].

Estos son los comandos internos especiales de POSIX:break : . continue eval exec exit export readonly return set shift trap unset

Página 71

Page 72: manual de Bash 4.1

Capítulo 5: Variables de la shell

5.- Variables de ShellEste capítulo describe las variables de shell que son usadas por Bash. Bash asigna automáticamente valores por defecto a algunas variables.

5.1.- Variables de la Shell BourneBash utiliza ciertas variables de la shell del mismo modo que la shell Bourne. En algunos casos Bash asigna un valor por defecto a las variables.

CDPATHUna lista de directorios separados por dos puntos (':') utilizada como ruta de búsqueda para el comando interno cd.

HOMEEl directorio de usuario actual; el valor por defecto para el comando interno cd. El valor de esta variable también se utiliza para la expansión de tildes (vea la Sección 3.5.2 [Expansión de Tildes]).

IFSUna lista de caracteres que separan campos; se utiliza cuando la shell separa las palabras que forman parte de una expansión.

MAILSi este parámetro está establecido a un nombre de archivo y la variable MAILPATH no está establecida, Bash informa al usuario de la llegada de un correo en el archivo especificado.

MAILPATHEs una lista de nombres de archivo separados por dos puntos (':') los cuales son comprobados periódicamente por la shell en busca de nuevos correos. Cada entrada de la lista puede especificar el mensaje que se imprime cuando llega un correo al archivo de correo separando el nombre de archivo del mensaje mediante un '?'. Cuando se utiliza en el texto del mensaje, $_ se expande al nombre del archivo de correo actual.

OPTARGEl valor del último argumento de opción procesado por el comando interno getopts.

OPTINDEl índice del último argumento de opción procesado por el comando interno getopts.

PATHUna lista de directorios separados por dos puntos (':') en los cuales la shell busca los comandos. Un nombre de directorio de longitud cero (nulo) en el valor de PATH indica el directorio actual. Un nombre de directorio nulo puede aparecer como dos signos ':' adyacentes o como un signo dos puntos al inicio o al final.

PS1La cadena de prompt primaria. El valor por defecto es '\s-\v\$ '. Vea la Sección 6.9 [Imprimiendo un Prompt], para una lista completa de las secuencias de escape que se expanden antes de que se muestre PS1.

Página 72

Page 73: manual de Bash 4.1

Capítulo 5: Variables de la shell

PS2La cadena de prompt secundaria. El valor por defecto es '>'.

5.2.- Variables de BashEstas variables son establecidas o usadas por Bash, pero otras shell normalmente no las tratan de forma especial.

Algunas variables de Bash están descritas en otros capítulos: variables para controlar las características de control de tareas (vea la Sección 7.3 [Variables de Control de Tareas]).

BASHLa ruta completa usada para ejecutar la instancia actual de Bash.

BASHOPTSUna lista de opciones de shell activas separadas por un ':'. Cada palabra en la lista es un argumento válido para la opción '-s' del comando interno shopt (vea la Sección 4.3.2 [El Comando Interno Shopt]). Las opciones que aparecen en BASHOPTS son las que shopt muestra como activas ('on'). Si esta variable está en el entorno cuando Bash comienza, cada opción de la shell en la lista se activará antes de leer cualquier archivo de inicio. Esta variable es de sólo lectura.

BASHPIDExpande al id de proceso del proceso Bash actual. Este difiere de $$ bajo ciertas condiciones, como en aquellas subshells que no requieren que Bash sea reinicializado.

BASH_ALIASESUna variable de tipo array asociativo cuyos miembros se corresponden con la lista interna de alias tal como es mantenida por el comando interno alias (vea la Sección 4.1 [Comandos Internos de Shell]). Los elementos añadidos a este array aparecen en la lista de alias; quitar elementos del array produce que sean eliminados de la lista de alias.

BASH_ARGCUna variable de tipo array cuyos valores son el número de parámetros en cada marco de la pilla de llamadas de ejecución actual de Bash. El número de parámetros de la subrutina actual (para funciones de shell o guiones de comandos ejecutados con . o source) está en la cima de la pila. Cuando se ejecuta una subrutina, el número de parámetros pasado se empuja dentro de BASH_ARGC. La shell establece BASH_ARGC sólo cuando se encuentra en el modo de depuración extendido (vea la Sección 4.3.2 [El Comando Interno Shopt] para obtener una descripción de la opción extdebug del comando interno shopt).

BASH_ARGVUna variable de tipo array que contiene todos los parámetros en la pila de llamadas de ejecución actual de Bash. El parámetro final de la última subrutina llamada se encuentra en la cima de la pila; el primer parámetro de la llamada inicial está en el fondo. Cuando se ejecuta una subrutina, los parámetros suministrados son empujados dentro de BASH_ARGV. La shell establece BASH_ARGV sólo cuando se ejecuta en el modo de depuración extendido. (vea la Sección 4.3.2 [El Comando Interno Shopt] para obtener

Página 73

Page 74: manual de Bash 4.1

Capítulo 5: Variables de la shell

una descripción de la opción extdebug del comando interno shopt).

BASH_CMDSUna variable de tipo asociativo cuyos miembros se corresponden con la tabla hash interna de comandos tal como es mantenida por el comando interno hash (vea la Sección 4.1 [Comandos Internos de la Shell Bourne]). Los elementos añadidos a este array aparecen en la tabla hash; quitar elementos de este array produce que los comandos sean removidos de la tabla hash.

BASH_COMMANDEl 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_ENVSi 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_STRINGEl argumento del comando para la opción de invocación '-c'.

BASH_LINENOUna 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_REMATCHUna 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_SOURCEUna variable de tipo array cuyos miembros son los nombres de archivo correspondientes a los elementos en la variable de tipo array FUNCNAME.

BASH_SUBSHELLEs incrementado en una unidad cada vez que se genera una subshell o un entorno de subshell. El valor inicial es 0.

BASH_VERSINFOUna 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:

Página 74

Page 75: manual de Bash 4.1

Capítulo 5: Variables de la shell

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).

BASH_VERSINFO[5]El valor de MACHTYPE.

BASH_VERSIONEl número de versión de la instancia actual de Bash.

BASH_XTRACEFDSi 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.

COLUMNSUsado 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_CWORDUn í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_LINELa 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_POINTEl í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

Página 75

Page 76: manual de Bash 4.1

Capítulo 5: Variables de la shell

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_TYPESe establece a un valor entero que corresponde al tipo de completado que se ha inten-tado 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_KEYLa llave (o llave final o una secuencia de llaves) usada para invocar la función de completado actual.

COMP_WORDBREAKSEl 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 propiedades especiales, incluso si es restablecida posteriormente.

COMP_WORDSUna variable de tipo array consistente en las palabras individuales contenidas en la línea de comandos actual. La línea es dividida en palabras como lo haría Readline, usando COMP_WORDBREAKS como se describe más arriba. Esta variable está disponible únicamente en las funciones de shell invocadas por las características de completado programable (vea la Sección 8.6 [Completado Programable]).

COMPREPLYUna variable de tipo array desde la cual Bash lee los posibles completados generados por una función de shell invocada por las características de completado programable (vea la Sección 8.6 [Completado Programable]).

DIRSTACKUna variable de tipo array que almacena los contenidos actuales de la pila de direc-torios. Los directorios aparecen en la pila en el orden que son mostrados por el comando interno dirs. Se pueden modificar los directorios contenidos actualmente en la pila asignando valores a los miembros de esta variable de tipo array, pero se deben utilizar los comandos internos pushd y popd para añadir y eliminar directorios. Asignar valores a esta variable no modificará el directorio actual. Si se elimina DIRSTACK, esta pierde sus propiedades especiales, incluso si es restablecida posteriormente.

EMACSSi Bash encuentra esta variable en el entorno cuando la shell se inicia con el valor 't', este asume que la shell se está ejecutando en un buffer de shell emacs y desactiva la edición de líneas.

Página 76

Page 77: manual de Bash 4.1

Capítulo 5: Variables de la shell

EUIDEl número de id de usuario efectivo del usuario actual. Esta variable es de sólo lectura.

FCEDITEl editor usado por defecto por la opción '-e' para el comando interno fc.

FIGNOREEs una lista, cuyos miembros están separados por dos puntos, de sufijos a los que ignorar cuando se realiza el completado de nombres de fichero. Un nombre de fichero cuyo sufijo concuerda con una de las entradas de FIGNORE es excluida de la lista de nombres de archivo concordantes. Por ejemplo, podría valer '.o:~ '

FUNCNAMEUna variable de tipo array que contiene los nombres de todas las funciones de shell que están actualmente en la pila de llamadas de ejecución. El elemento con índice 0 es el nombre de cualquier función de shell que esté actualmente en ejecución. El elemento más en el fondo es “main”. Esta variable existe sólo cuando se está ejecutando una función de shell. Las asignaciones a FUNCNAME no tienen efectos y devuelven un estado de error. Si se elimina FUNCNAME, esta pierde sus propiedades especiales, incluso si es restablecida posteriormente.

GLOBIGNOREUna lista de patrones separados por dos puntos que definen el juego de nombres de fichero que deben ser ignorados por la expansión de nombres de fichero. Si un nombre de fichero concuerda con un patrón de expansión de nombres de fichero y también concuerda con uno de los patrones en GLOBIGNORE, este es eliminado de la lista de concordancias.

GROUPSUna variable de tipo array que contiene la lista de grupos de los que forma parte el usuario actual. Asignar valores a GROUPS no tiene ningún efecto y devuelve un estado de error. Si se elimina GROUPS esta pierde sus propiedades especiales, incluso si se restaura posteriormente.

histcharsHasta tres caracteres que controlan la expansión de la historia, la sustitución rápida y la tokenización (vea la Sección 9.3 [Interacción con la Historia]). El primer carácter es el carácter de expansión de la historia, esto es, el carácter que significa el comienzo de una expansión de la historia, normalmente '!'. El segundo carácter es el carácter que significa 'sustitución rápida' cuando se encuentra como el primer carácter de una línea, normalmente es '^'. El tercer carácter es opcional e indica que el resto de la línea es un comentario cuando se encuentra como el primer carácter de una palabra, normalmente es '#'. El carácter de comentario de la historia provoca que se evite la sustitución de la historia para el resto de las palabras de la línea. Este no produce necesariamente que el analizador de la shell trate el resto de la línea como un comentario.

HISTCMDEl número de historia, o el índice en la lista de historia, del comando actual. Si se

Página 77

Page 78: manual de Bash 4.1

Capítulo 5: Variables de la shell

elimina HISTCMD esta pierde sus propiedades especiales, incluso si es restablecida posteriormente.

HISTCONTROLUna lista de valores separados por dos puntos que controlan cómo se guardan los comandos en la lista de historia. Si la lista de valores incluye 'ignorespace', las líneas que comienzan un carácter espacio no se guardan en la lista de historia. Un valor de 'ignoredups' produce que las líneas que encajan con las entradas previas de la historia no se guarden. Un valor de 'ignoreboth' es una forma corta para 'ignorespace' e 'ignoredups'. Un valor de 'erasedups' produce que todas las líneas previas que encajan con la línea actual sean eliminadas de la lista de historia antes de que esa línea sea guardada. Cualquier valor que no esté entre los anteriores es ignorado. Si se elimina HISTCONTROL, o este no incluye un valor válido, todas las líneas leídas por el analizador de la shell son guardadas en la lista de historia, teniendo en cuenta el valor de HISTIGNORE.

La segunda línea y las posteriores de un comando compuesto multilínea no son comprobadas y son añadidas a la historia sin tener en cuenta el valor de HISTCONTROL.

HISTFILEEl nombre del archivo en el que se guarda la historia de comandos. El valor por defecto es '~ /.bash_history'

HISTFILESIZEEl número máximo de líneas contenidas en el archivo de historia. Cuando se asigna un valor a esta variable se recorta el archivo de historia, si es necesario, eliminando las entradas más antiguas, para que no contenga más que el número de líneas dado. También se recorta el archivo de historia a este tamaño después de escribir en él cuando una shell interactiva finaliza. El valor por defecto es 500.

HISTIGNOREUna 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.

Página 78

Page 79: manual de Bash 4.1

Capítulo 5: Variables de la shell

HISTSIZEEl número máximo de comandos que deben ser mantenidos en la lista de historia. El valor por defecto es 500.

HISTTIMEFORMATSi 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.

HOSTFILEContiene 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.

HOSTNAMEEl nombre del anfitrión (host) actual.

HOSTTYPEUna cadena que describe la máquina en la que se está ejecutando Bash.

IGNOREEOFControla 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.

INPUTRCEl nombre del archivo de inicialización de Readline, sobreescribiendo el valor por defecto '~/.inputrc'

LANGSe 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_ALLEsta variable sobreescribe el valor de LANG y cualquier otra variable LC_ especificando

Página 79

Page 80: manual de Bash 4.1

Capítulo 5: Variables de la shell

una categoría de localización.

LC_COLLATEEsta 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_CTYPEEsta 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_MESSAGESEsta 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_NUMERICEsta variable determina la categoría de localización usada para el formateado numérico.

LINENOEl número de línea en el guión de comandos o en la función de shell que se está eje-cutando actualmente.

LINESUsada 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.

MACHTYPEUna 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.

MAILCHECKCon 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.

OLDPWDEs el directorio de trabajo previo como se establece por el comando interno cd.

OPTERRSi se establece al valor 1, Bash muestra los mensajes de error generados por el comando interno getopts.

OSTYPEUna cadena que describe el sistema operativo en el que se está ejecutando Bash.

Página 80

Page 81: manual de Bash 4.1

Capítulo 5: Variables de la shell

PIPESTATUSUna 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_CORRECTSi 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

PPIDEl ID de proceso del proceso padre de la shell. Esta variable es de sólo lectura.

PROMPT_COMMANDSi está establecida, su valor es interpretado como un comando a ejecutar antes de imprimir cada prompt primario ($PS1).

PROMPT_DIRTRIMSi 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 carac-teres eliminados son reemplazados con una elipsis '..'

PS3El 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 '#?'.

PS4Este 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 '+'.

PWDEl directorio de trabajo actual como se establece por el comando interno cd.

RANDOMCada 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.

REPLYLa variable por defecto para el comando interno read.

SECONDSEsta 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

Página 81

Page 82: manual de Bash 4.1

Capítulo 5: Variables de la shell

asignación.

SHELLLa 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.

SHELLOPTSUna 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.

SHLVLEs 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.

TIMEFORMATEl 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.

TMOUTSi está establecido a un valor mayor que cero, TMOUT se trata como el temporizador

Página 82

Page 83: manual de Bash 4.1

Capítulo 5: Variables de la shell

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 una entrada tras mostrar el prompt primario. Bash termina tras transcurrir este número de segundos si no se recibe la entrada.

TMPDIRSi 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.

UIDEl valor numérico del id de usuario real del usuario actual. Esta variable es de sólo lectura.

Página 83

Page 84: manual de Bash 4.1

Capítulo 6: Características de Bash

6.- Características de BashEsta sección describe las características únicas de Bash.

6.1.- Invocando a Bashbash [opt-larg] [-ir] [-abefhkmnptuvxdBCDHP] [-o opción] [-O

opción_corta] [argumento …]

bash [opt-larg] [-abefhkmnptuvxdBCDHP] [-o opción] [-O opción_corta] -c cadena [argumento …]

bash [opt-larg] -s [-abefhkmnptuvxdBCDHP] [-o opción] [-O opción_corta] [argumento …]

Adicionalmente a las opciones de línea de comandos de shell de un único carácter (vea la Sección 4.3.1 [El Comando Interno Set]), hay varias opciones multicarácter que puede usar. Estas opciones deben aparecer en la línea de comandos antes de las opciones de un único carácter para que puedan ser reconocidas.

--debugger

ordena que se ejecute el perfíl de depuración antes de que la shell se inicie. Activa el modo de depuración extendido (vea la Sección 4.3.2 [El Comando Interno Shopt] para una descripción de la opción extdebug para el comando interno shopt) y el traceado de las funciones de shell (vea la Sección 4.3.1 [El Comando Interno Set] para una descripción de la opción -o functrace )

--dump-po-strings

Se imprime una lista de cadenas encerradas entre comillas dobles precedidas cada una de ellas por '$' en la salida estándar en el formato de archivo de GNU gettext PO (objeto portable). Equivale a '-D' excepto por el formato de salida.

--dump-strings

Equivale a '-D'

--helpMuestra un mensaje de uso en la salida estándar y sale con éxito.

--init-file nombre_de_archivo

--rcfile nombre_de_archivoEjecuta los comandos contenidos en nombre_de_archivo (en vez de '~/.bashrc') en una shell interactiva.

--login

Equivale a '-l'.

--noediting

No usa la librería Readline de GNU (vea el capítulo 8 [Edición de la Línea de Comandos]) para leer líneas de comandos en las shell interactivas.

--noprofile

No carga el archivo de inicio de sistema '/etc/profile' ni cualquier otro fichero de inicialización personal '~/.bash_profile', '~/.bash_login', o '~/.profile' cuando se invoca a la shell como una shell de inicio de sesión.

Página 84

Page 85: manual de Bash 4.1

Capítulo 6: Características de Bash

--norc

No lee el archivo de inicialización '~/.bashrc' en una shell interactiva. Esta opción está activa por defecto si la shell se invoca con sh.

--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

Página 85

Page 86: manual de Bash 4.1

Capítulo 6: Características de Bash

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 elimina. Si no se suministra opción_shopt, se imprimen en la salida estándar los nombres y valores de las opciones aceptadas por shopt . Si la opción de invocación es '+O' la salida se muestra en un formato que puede ser reutilizado como entrada.

-- Un -- indica el final de las opciones y desactiva el posterior procesado de opciones. Los argumentos tras el -- se tratan como nombres de fichero y argumentos.

Una shell de inicio de sesión es aquella cuyo primer carácter o argumento cero es '-', o aquella invocada con la opción '--login'.

Una shell interactiva es aquella iniciada sin argumentos que no sean opciones, a menos que se especifique '-s', sin especificar la opción '-c', y aquellas cuya entrada y salida están conectadas a un terminal (como se determina por isatty(3)), o aquella iniciada con la opción '-i'. Vea la Sección 6.3 [Shells Interactivas] para más información.

Si quedan argumentos tras el procesado de opciones, y no se han suministrado las opciones '-c' o '-s', se supone que el primer argumento es el nombre de un archivo que contiene comandos de shell (vea la Sección 3.8 [Guiones de la Shell]). Cuando se invoca a Bash de este modo, se establece el valor de $0 al nombre del archivo, y los parámetros posicionales se ajustan al resto de argumentos. Bash lee y ejecuta comandos desde este fichero y luego finaliza. El estado de salida de Bash es el estado de salida del último comando ejecutado en el guión de comandos. Si no se ejecutaron comandos el estado de salida es 0.

6.2.- Ficheros de Inicio de BashEsta sección describe cómo ejecuta Bash sus ficheros de inicio. Si alguno de los archivos existe pero no puede ser leído, Bash informa de un error. Las tildes se expanden en nombres de fichero como se describió anteriormente bajo Expansión de Tildes (vea la Sección 3.5.2 [Expansión de Tildes]).

Las shells interactivas se describen en la Sección 6.3 [Shells Interactivas].

Invocado como una shell interactiva de inicio de sesión, o con '--login'

Cuando se invoca a Bash como una shell interactiva de inicio de sesión, o como una shell no inte-ractiva con la opción '--login', este primero lee y ejecuta los comandos del fichero '/etc/profile', si ese archivo existe. Tras leer dicho fichero, busca los archivos '~/.bash_profile', '~/bash_login' y '~/.profile' en ese orden, y lee y ejecuta los comandos comenzando por el primero de ellos que exista y sea legible. La opción '--noprofile' se puede utilizar al inicio de la shell para inhibir este comportamiento.

Cuando una shell de inicio de sesión finaliza, Bash lee y ejecuta los comandos del archivo

Página 86

Page 87: manual de Bash 4.1

Capítulo 6: Características de Bash

'~/.bash_logout', si este existe.

Invocado como una shell interactiva no de inicio de sesión

Cuando se inicia una shell interactiva que no es de inicio de sesión, Bash lee y ejecuta los comandos del archivo '~/bashrc', si dicho archivo existe. Este comportamiento puede inhibirse usando la opción '--norc'. La opción '--rcfile fichero' forzará a Bash a leer y ejecutar comandos desde el archivo fichero en lugar de '~/bashrc'.

Normalmente el archivo '~/.bash_profile' contiene la líneaif [-f ~/.bashrc ]; then . ~/.bashrc; fi

después (o antes) de cualquier inicialización específica del inicio de sesión.

Invocado de forma no interactiva.

Cuando Bash se inicia de forma no interactiva, para ejecutar un guión de comandos de shell, por ejemplo, este busca la variable BASH_ENV en el entorno, expande su valor si esta aparece, y usa el valor expandido como el nombre de un fichero a leer y ejecutar. Bash se comporta como si se ejecu-tara el siguiente comando:

if [ -n “$BASH_ENV” ]; then . “$BASH_ENV”; fi

pero el valor de la variable PATH no se utiliza para buscar el fichero.Como se advirtió anteriormente, si se invoca una shell no interactiva con la opción '--login',

Bash intenta leer y ejecutar los comandos de los archivos de inicio de la shell de inicio de sesión.

Invocado con el nombre sh

Si se invoca a Bash con el nombre sh, este intenta imitar el comportamiento de inicio de versiones anteriores de sh tan ajustado como sea posible, mientras mantiene también la conformidad con el estándar POSIX.

Cuando se invoca como una shell interactiva de inicio de sesión, o como una shell no inte-ractiva con la opción '--login', primero intenta leer y ejecutar comandos de los archivos '/etc/profile' y '~/.profile', en ese orden. La opción '--noprofile' se puede utilizar para inhibir este comportamiento. Cuando se invoca como una shell interactiva con el nombre sh, Bash busca la variable ENV, expande su valor si está definida, y utiliza el valor expandido como el nombre de un fichero que debe leer y ejecutar. Puesto que una shell invocada como sh no intenta leer y ejecutar comandos desde ningún otro archivo de inicio, la opción '--rcfile' no tiene ningún efecto. Una shell no interactiva invocada con el nombre sh no intenta leer ningún otro archivo de inicio.

Cuando se invoca como sh, Bash entra en el modo POSIX después de leer los archivos de inicio.

Invocado en modo POSIX

Cuando Bash se inicia en modo POSIX, como con la opción de línea de comandos '--posix', este sigue el estándar POSIX para los archivos de inicio. En este modo, las shells interactivas expanden la variable ENV y los comandos se leen y ejecutan desde el fichero cuyo nombre es el valor expandido. No se lee ningún otro archivo de inicio.

Página 87

Page 88: manual de Bash 4.1

Capítulo 6: Características de Bash

Invocado por un demonio de shell remoto.

Bash intenta determinar cuando está siendo ejecutado con su entrada estándar conectada a una conexión de red, como por el demonio remoto de shell, normalmente rshd, o el demonio de shell segura sshd. Si Bash determina que esta siendo ejecutado de este modo, este lee y ejecuta comandos desde '~/.bashrc', si ese archivo existe y es legible. Bash no hará eso si es invocado con sh. Se puede utilizar la opción '--norc' para inhibir este comportamiento, y la opción '--rcfile' para forzar a Bash a leer otro fichero, aunque rshd normalmente no invoca a la shell con estas opciones ni permite que estas sean especificadas.

Invocado con UID/GIDs reales y efectivas diferentes

Si Bash se inicia con el id de usuario (grupo) efectivo distinto al id de usuario (grupo) real, y la opción '-p' no se ha suministrado, no se lee ningún fichero de inicio, las funciones de shell no son heredadas del entorno, las variables SHELLOPTS, BASHOPTS, CDPATH y GLOBIGNORE, si estas aparecen en el entorno, son ignoradas, y el id de usuario efectivo se ajusta al id del usuario real. Si se suministra la opción '-p' en la invocación, el comportamiento de inicio es el mismo, pero no se restablece el id de usuario efectivo.

6.3.- Shells Interactivas

6.3.1.- ¿Qué es una Shell Interactiva?Una shell interactiva es aquella que es iniciada sin argumentos no de opción, a menos que se especifique la opción '-s', sin especificar la opción '-c', y aquellas en las que la entrada y la salida de error están ambas conectadas a terminales (como se determina por isatty(3)), o aquella que es iniciada con la opción '-i'.

Una shell interactiva generalmente lee desde y escribe hacia una terminal de usuario.La opción de invocación '-s' se puede utilizar para ajustar los parámetros posicionales cuando

se inicia una shell interactiva.

6.3.2.- ¿Es esta una shell Interactiva?Para determinar cuando un guión de inicio está ejecutándose o no de forma interactiva, compruebe el valor del parámetro especial '-'. Este contiene i cuando la shell es interactiva. Por ejemplo:

case "$-" in

*i*) echo Esta shell es interactiva ;;

*) echo Esta shell no es interactiva ;;

esac

Alternativamente, los guiones de inicio pueden examinar las variables PS1; esta no está esta-blecida en las shells no interactivas, y está establecida en las shells interactivas. Así:

if [ -z "$PS1" ]; then

echo Esta shell no es interactiva

else

echo Esta shell es interactiva

fi

6.3.3.- Comportamiento de la Shell InteractivaCuando la shell se ejecuta interactivamente, esta cambia su comportamiento de varios modos.

Página 88

Page 89: manual de Bash 4.1

Capítulo 6: Características de Bash

1. Los archivos de inicio son leídos y ejecutados como se describe en la Sección 6.2 [Ficheros de Inicio de Bash].

2. El Control de Tareas (vea el Capítulo 7 [Control de Tareas]) está habilitado por defecto. Cuando el control de tareas está teniendo efecto, Bash ignora las señales de control de tareas generadas por el teclado SIGTTIN, SIGTTOU y SIGTSTP.

3. Bash expande y muestra PS1 antes de leer la primera línea de un comando, y expande y muestra el valor de PS2 antes de leer la segunda línea y las siguientes de un comando multilínea.

4. Bash ejecuta el valor de la variable PROMPT_COMMAND como un comando antes de imprimir el prompt primario, $PS1 (vea la Sección 5.2 [Variables de Bash]).

5. Se utiliza readline (vea el Capítulo 8 [Edición de la Línea de Comandos]) para leer comandos desde el terminal de usuario.

6. Cuando está leyendo un comando Bash inspecciona el valor de la opción ignoreof para set -o en vez de salir inmediatamente cuando recibe un EOF desde su entrada estándar.

7. La historia de comandos (vea la Sección 9.1 [Las Características de Historia de Bash]) y la expansión de la historia (vea la Sección 9.3 [Interaccionando con la Historia]) están habili-tadas por defecto. Cuando una shell interactiva finaliza, Bash guardará la historia de comandos en el archivo cuyo nombre viene dado por el valor de la variable $HISTFILE.

8. La expansión de alias (vea la Sección 6.6 [Alias]) es realizada por defecto.9. En ausencia de cualquier trampa, Bash ignora la señal SIGTERM (vea la Sección 3.7.6

[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

Página 89

Page 90: manual de Bash 4.1

Capítulo 6: Características de Bash

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]).

6.4.- Expresiones Condicionales de BashLas expresiones condicionales son usadas por el comando compuesto [[ y los comandos internos test y [.

Las expresiones pueden ser unarias o binarias. Las expresiones unarias se utilizan en ocasiones para examinar el estado de un fichero. También hay operadores de cadena y operadores de compa-ración numérica. Si el argumento fichero para una de las expresiones de tipo unario es de la forma '/dev/fd/N', entonces se comprueba el descriptor de fichero N. Si el argumento fichero para una de las expresiones de tipo unario es uno de entre '/dev/stdin', '/dev/stdout' o '/dev/stderr' se comprueban los descriptores de fichero 0,1 ó 2 respectivamente.

Cuando se utiliza con [[, los operadores '<' y '>' ordenan lexicográficamente usando la localización actual.

A menos que se especifique lo contrario, las expresiones unarias que operan con ficheros siguen los enlaces simbólicos y operan con el destino del enlace en vez de con el propio enlace.

-a fichero Verdad (true) si el fichero existe.

-b fichero Verdad si el fichero existe y es un fichero especial de bloques.

-c fichero Verdad si el fichero existe y es un fichero especial de caracteres.

-d fichero Verdad si el fichero existe y es un directorio.

-e fichero Verdad si el fichero existe.

-f fichero Verdad si el fichero existe y es un fichero regular.

-g fichero Verdad si el fichero existe y su bit SGID está activado.

-h fichero Verdad si el fichero existe y es un enlace simbólico.

-k fichero Verdad si el fichero existe y su bit “pegajoso” (“sticky”) está activado.

-p fichero Verdad si el fichero existe y es una tubería con nombre (FIFO).

-r fichero Verdad si el fichero existe y se puede leer.

-s fichero Verdad si el fichero existe y tiene un tamaño mayor que cero.

-t fd Verdad si el descriptor fd está abierto y se refiere a un terminal.

-u fichero Verdad si el fichero existe y su bit SUID está activado.

-w fichero Verdad si el fichero existe y se puede modificar.

-x fichero Verdad si el fichero existe y es ejecutable.

-O fichero Verdad si el fichero existe y su propietario es el UID efectivo.

Página 90

Page 91: manual de Bash 4.1

Capítulo 6: Características de Bash

-G fichero Verdad si el fichero existe y su grupo es el GID

-L fichero Verdad si el fichero existe y es un enlace simbólico.

-S fichero Verdad si el fichero existe y es un socket.

-N fichero Verdad si el fichero existe y ha sido modificado desde que fuel leído la última vez.

fichero1 -nt fichero2

Verdad si fichero1 es más nuevo (de acuerdo con su fecha de modifi-cación)que fichero2, o si fichero1 existe y fichero2 no.

fichero1 -ot fichero2

Verdad si fichero1 es más viejo que fichero2, o si fichero2 existe y fichero1 no.

fichero1 -ef fichero2

Verdad si fichero1 y fichero2 referencian al mismo dispositivo y número de inodo.

-o nombreopt Verdad si la opción de shell nombreopt está activada. La lista de opciones aparece en la descripción de la opción '-o' del comando interno set (vea la Sección 4.3.1 [El Comando Interno Set]).

-z cadena Verdad si la longitud de la cadena es cero

-n cadena

cadena Verdad si la longitud de la cadena es distinta de cero.

cadena1 == cadena2cadena1 = cadena2

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 91

Page 92: manual de Bash 4.1

Capítulo 6: Características de Bash

6.5.- Aritmética de la Shell.La shell permite que las expresiones aritméticas sean evaluadas, como en la expansión de shell o mediante el comando interno let o el comando interno declare con la opción '-i'.

La evaluación se hace en enteros de anchura fija sin comprobación de desbordamiento, aunque la división por 0 es capturada y marcada como un error. Los operadores y sus precedencias, asocia-tividad y valores son iguales que el lenguaje C. La siguiente lista de operadores se agrupa en niveles de igual precedencia. Los niveles son listados en orden de precedencia decreciente.

id++ id-- post-incremento y post-decremento de variables

++id --id pre-incremento y pre-decremento de variables

- + menos y más unarios (positivo y negativo)

! ~ negación lógica y binaria

** exponenciación

* / % multiplicación, división, resto

+ - adición, sustracción

<< >> desplazamiento de bits a la izquierda y a la derecha

<= >= < > comparaciones

== != igualdad y desigualdad

& y binario (AND)

^ o binario exclusivo (XOR)

| o binario (OR)

&& y lógico (AND)

|| o lógico (OR)

expr ? expr : expr

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 referen-ciadas 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.

Página 92

Page 93: manual de Bash 4.1

Capítulo 6: Características de Bash

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.- AliasLos 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 expan-dida 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 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 eje-cutan 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 sepa-rada, y no use alias en comandos compuestos.

Para casi cualquier propósito, se prefiere las funciones de shell sobre los alias.

Página 93

Page 94: manual de Bash 4.1

Capítulo 6: Características de Bash

6.7.- ArraysBash 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 sintaxisdeclare -a nombre[índice]

también es válida; el índice se ignoraLos arrays asociativos se declaran usandodeclare -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 indivi-

duales 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 nada. Si la expansión entre dobles comillas ocurre dentro de una palabra, la expan-sió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.

Página 94

Page 95: manual de Bash 4.1

Capítulo 6: Características de Bash

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.

6.8.- La Pila de DirectoriosLa pila de directorios es una lista con los directorios visitados recientemente. El comando interno pushd añade directorios a la pila y cambia el directorio actual por el último directorio añadido a la pila, y el comando interno popd elimina los directorios especificados y cambia el directorio actual por el último directorio eliminado. El comando interno dirs muestra el contenido de la pila de directorios.

El contenido de la pila de directorios también es visible mediante el valor de la variable de shell DIRSTACK.

6.8.1.- Comandos Internos de la Pila de Directoriosdirs

dirs [+N | -N] [-clpv]

Muestra la lista de directorios almacenados actualmente. Los directorios se añaden a la lista con el comando push; el comando popd elimina directorios de la lista.

+N Muestra el n-ésimo directorio (contando desde la izquierda de la lista imprimida por dirs cuando es invocado sin opciones), comenzando desde el cero.

-N Muestra el n-ésimo directorio (contando desde la derecha de la lista imprimida por dirs cuando es invocado sin opciones), empezando desde cero.

-c Limpia la pila de directorios eliminando todos los elementos.

-l Produce un listado largo; el formato de listado por defecto utiliza una tilde para denotar el directorio home.

-p Produce que dirs imprima la pila de directorios con una entrada por línea

-v Produce que dirs imprima la pila de directorios con una entrada por línea, prefijando cada entrada con su índice en la pila.

Página 95

Page 96: manual de Bash 4.1

Capítulo 6: Características de Bash

popdpopd [+N | -N] [-n]

Elimina la entrada de la cima de la pila de directorios, y realiza un cd al nuevo direc-torio 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.

pushdpushd [-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 impri-mida 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.

6.9.- Controlando el PromptSe examina el valor de la variable PROMPT_COMMAND justo antes de que Bash imprima cada prompt primario. Si PROMPT_COMMAND está establecida y no tiene un valor nulo, entonces su valor se ejecuta como si hubiese sido introducido en la línea de comandos.

Adicionalmente, la tabla siguiente describe los caracteres especiales que pueden aparecer en las variables de prompt:

\a Un carácter campana.

\d La fecha, en formato “Día de la semana Mes Día del mes” (por ejemplo “Tue May 26”).

\D{formato}

Página 96

Page 97: manual de Bash 4.1

Capítulo 6: Características de Bash

El formato se pasa a strftime(3) y el resultado se inserta en la cadena del prompt; un formato vacío resulta en una representación de tiempo específica de la localización. Las llaves son obligatorias.

\e Un carácter de escape.

\h El nombre de anfitrión (host), hasta el primer '.'.

\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 intro-ducir 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

Página 97

Page 98: manual de Bash 4.1

Capítulo 6: Características de Bash

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]).

6.10.- La Shell RestringidaSi Bash se inicia con el nombre rbash, o se suministran las opciones '--restricted' o '-r' en la invocación, la shell se convierte en restringida. Una shell restringida se utiliza para establecer un entorno más controlado que la shell estándar. Una shell restringida se comporta de forma idéntica a 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.

6.11.- El Modo POSIX de BashIniciar Bash con la opción de la línea de comandos '--posix' o ejecutando 'set -o posix' mientras Bash se está ejecutando, producirá que Bash se ajuste al estándar POSIX cambiando su comportamiento para encajar con las especificaciones POSIX en aquellas áreas en las que el comportamiento por defecto de Bash difiere de estas.

Cuando se invoca como sh, Bash entra en el modo POSIX tras leer los archivos de inicio.A continuación se muestra una lista con los cambios que tienen efecto cuando Bash cambia al

modo POSIX:1. Cuando un comando deja de existir en la tabla hash, Bash volverá a buscar en $PATH para

encontrar la nueva localización. Esto también es posible con 'shopt -s checkhash'.2. El mensaje imprimido por el código de control de tareas y los comandos internos cuando

una tarea finaliza con un estado distinto de cero es 'Hecho(estado)'.3. El mensaje imprimido por el código de control de tareas y los comandos internos cuando se

Página 98

Page 99: manual de Bash 4.1

Capítulo 6: Características de Bash

detiene una tarea es 'Detenido(nombreSeñal)', donde nombreSeñal es, por ejemplo, SIGTSTP.

4. El comando interno bg utiliza el formato requerido para describir cada tarea situada en segundo plano, lo que no incluye una indicación de si la tarea es la actual o la anterior.

5. Las palabras reservadas que aparecen en un contexto donde se reconocen palabras reser-vadas no sufren expansión de alias.

6. En PS1 y PS2 las expansiones POSIX de '!' para el número de historia y '!!' para '!' están activadas, y la expansión de parámetros se realiza en los valores de PS1 y PS2 a pesar de los ajustes de la opción promptvars.

7. Se ejecutan los ficheros de inicio de POSIX ($ENV) en vez de los ficheros de inicio de Bash.8. La expansión de tildes se realiza sólo en asignaciones que precedan a un nombre de

comando, en vez de en todas las sentencias de asignación de la línea.9. El archivo de historia por defecto es '~/.sh_history' (este es el valor por defecto de

$HISTFILE).10. La salida de 'kill -l' imprime todos los nombres de señal en una única línea, separadas

por espacios sin el prefijo 'SIG'.11. El comando interno kill no acepta nombres de señal con un prefijo 'SIG'.12. Las shells no interactivas finalizan si . nombreArchivo no encuentra a nombreArchivo.13. Las shells no interactivas finalizan si un error de sintaxis en una expansión aritmética resulta

en una expresión inválida.14. Los operadores de redirección no realizan expansión de nombres de fichero en la palabra en

la redirección a menos que la shell sea interactiva.15. Los operadores de redirección no realizan separación de palabras en la palabra en la redi-

rección.16. Los nombres de funciones deben ser nombres válidos para la shell. Esto es, estos no pueden

contener caracteres distintos de letras, dígitos y caracteres de subrayado, y no pueden comenzar con un dígito. Declarar una función con un nombre inválido provoca un error de sintaxis fatal en las shells no interactivas.

17. Los comandos internos especiales de POSIX se encuentran antes que las funciones de shell durante la búsqueda de comandos.

18. Una shell no interactiva finalizará si un comando interno especial de POSIX devuelve un estado de error. Los errores fatales son aquellos que se listan en el estándar POSIX, e incluye cosas como pasar opciones incorrectas, errores de redirección, errores en la asignación de variables para asignaciones que preceden a un nombre de comandos y algunas más.

19. Si CDPATH está establecida, el comando interno cd no añadirá implícitamente el directorio actual al valor de esta variable. Esto significa que cd fallará si no se puede construir ningún nombre de directorio válido desde ninguna de las entradas en $CDPATH, incluso si en el directorio actual existe un directorio con el mismo nombre que el dado como argumento a cd.

20. Una shell no interactiva finalizará con un estado de error si se produce un error de asignación de variables cuando no hay ningún nombre de comando que siga a las sentencias de asignación. Un error de asignación de variables se produce, por ejemplo, cuando se

Página 99

Page 100: manual de Bash 4.1

Capítulo 6: Características de Bash

intenta asignar un valor a una variable de sólo lectura.21. Una shell no interactiva finalizará con un estado de error si la variable de iteración en una

sentencia for o la variable de selección en una sentencia select es una variable de sólo lectura.

22. La sustitución de procesos no está disponible.23. Las sentencias de asignación que precedan a los comandos internos especiales POSIX se

mantienen en el entorno de shell después de que el comando interno finalice.24. Las sentencias de asignación que precedan a las llamadas a funciones de shell se mantienen

en el entorno de la shell después de que la función retorne, como se si hubiese ejecutado un comando interno especial de POSIX.

25. Los comandos internos export y readonly muestran sus salidas en el formato requerido por POSIX.

26. El comando interno trap muestra los nombres de señal sin el prefijo SIG.27. El comando interno trap no comprueba el primer argumento para una posible especificación

de señal ni revierte el manejo de señales a la disposición original si lo es, a menos que el argumento consista únicamente en dígitos y sea un número de señal válido. Si los usuarios quieren restablecer el manejador para una señal dada a la disposición original, deben usar '-' como primer argumento.

28. Los comandos internos . y source no en buscan el argumento nombre de fichero en el directorio actual si este no se encuentra buscando en el PATH.

29. Las subshells generadas para ejecutar sustituciones de comandos heredan el valor de la opción '-e' desde el padre de la shell. Cuando no se encuentra en modo POSIX, Bash limpia la opción '-e' en tales subshells.

30. La expansión de alias está siempre activada, incluso en shells no interactivas.31. Cuando el comando interno alias muestra las definiciones de alias, este no las muestra con

una cadena 'alias' al comienzo, a menos que se suministre la opción '-p'.32. Cuando se invoca al comando interno set sin opciones, este no muestra los nombres de

función y sus definiciones.33. Cuando se invoca al comando interno set sin opciones, este muestra los valores de las

variables sin entrecomillar, a menos que estos contengan metacaracteres de shell, incluso si el resultado contiene caracteres no imprimibles.

34. Cuando se invoca al comando interno cd en modo lógico, y la ruta construida desde $PWD y el nombre de directorio suministrado como argumento no referencian a un directorio existente, cd fallará en lugar de volver al modo físico.

35. Cuando se suministra la opción '-P' para el comando interno pwd, este restablece el valor de $PWD a una ruta que no contiene enlaces simbólicos.

36. El comando interno pwd verifica que el valor que imprime es el mismo que el del directorio actual, incluso si no se le ha pedido que compruebe el sistema de ficheros suministrándole la opción '-P'.

37. Cuando lista la historia, el comando interno fc no incluye una indicación de cual entrada ha sido modificada y cual no.

38. El editor por defecto usado para fc es ed.39. Los comandos internos type y command no informaran de que se ha encontrado un fichero

Página 100

Page 101: manual de Bash 4.1

Capítulo 6: Características de Bash

no ejecutable, aunque la shell intentará ejecutar ese fichero si es el único fichero de tal nombre que se ha encontrado en $PATH.

40. El modo de edición de vi invocará al editor vi directamente cuando el comando es ejecutado, en vez de comprobar los valores de $VISUAL y $EDITOR.

41. Cuando la opción xpg_echo está establecida, Bash no intentará interpretar ningún argumento para echo como una opción. Cada argumento se muestra, después de tranformar los caracteres escapados.

42. El comando interno ulimit utiliza un tamaño de bloque de 512 bytes para las opciones '-c' y '-f'.

43. La llegada de un SIGCHLD cuando se ha establecido una trampa sobre SIGCHLD no inte-rrumpe el comando interno wait y produce que este retorne inmediatamente. El comando trampa se ejecuta una vez para cada hijo que finaliza.

Existen otros comportamientos POSIX que Bash no implementa por defecto incluso cuando está funcionando en modo POSIX. Específicamente:

1. El comando interno fc comprueba $EDITOR en busca de un programa para editar las entradas de la historia si FCEDIT no está establecido, en vez de utilizar directamente ed. fc utiliza ed si EDITOR no está establecido.

2. Como se advirtió más arriba, Bash requiere que la opción xpg_echo esté activada para que el comando interno echo se comporte completamente conforme al estándar POSIX.

Se puede configurar Bash para ser conforme a POSIX por defecto, especificando la opción '--enable-strict-posix-default' a configure cuando se construye (vea la Sección 10.8 [Características Opcionales])

Página 101

Page 102: manual de Bash 4.1

Capítulo 7: Control de tareas

7.- Control de TareasEste capítulo describe qué es el control de tareas, cómo trabaja, y cómo le permite Bash acceder a estas características.

7.1.- Fundamentos del Control de TareasEl control de tareas se refiere a la habilidad de detener (suspender) selectivamente la ejecución de procesos y continuar (resumir) su ejecución en un momento posterior. Un usuario normalmente emplea estas características a través de una interfaz interactiva suministrada conjuntamente por el driver de terminal del kernel del sistema operativo y Bash.

La shell asocia una tarea con cada tubería. Esta mantiene una tabla de tareas actualmente en ejecución, la cual se puede listar con el comando jobs. Cuando Bash inicia una tarea asíncrona-mente, este imprime una línea como la siguiente:

[1] 25647indicando que esta es la tarea número 1 y que el ID de proceso del último proceso en la tubería asociada con esta tarea es 25647. Todos los procesos en una tubería simple son miembros de la misma tarea. Bash usa la abstracción de tarea como el fundamento para el control de tareas.

Para facilitar la implementación de la interfaz de usuario para el control de tareas, el sistema operativo mantiene la noción de un ID del grupo de procesos del terminal actual. Los miembros de este grupo de procesos (procesos cuyo ID de grupo de procesos es igual al ID del grupo de procesos del terminal actual) reciben señales generadas por el teclado como SIGINT. Estos procesos se dice que están en primer plano. Los procesos en segundo plano son aquellos cuyo ID de grupo de procesos difiere del correspondiente al terminal; estos procesos son inmunes a las señales generadas por el teclado. Sólo los procesos en primer plano pueden leer desde o, si el usuario así lo especifica con stty tostop, escribir hacia el terminal. Los procesos en segundo plano que intenten leer desde (o escribir, cuando stty tostop esté teniendo efecto, hacia) la terminal recibirán una señal SIGTTIN (SIGTTOU) enviada por el driver de terminal del kernel, la cual, a menos que sea capturada, suspenderá el proceso.

Si el sistema operativo en el que se está ejecutando Bash soporta el control de tareas, Bash presenta características para usarlas. Escribir el carácter de suspensión (normalmente '^Z', Control-Z) durante la ejecución de un proceso produce que el proceso se detenga y devuelva el control a Bash. Escribir el carácter de suspensión retrasada (normalmente '^Y', Control-Y) produce que el proceso se detenga cuando intente leer una entrada desde el terminal y devuelva el control a Bash. El usuario posteriormente puede manipular el estado de esta tarea, usando el comando bg para continuar esta tarea en segundo plano, el comando fg para continuar esta tarea en primer plano, o el comando kill para matarla. Un '^Z' tiene efecto inmediatamente, y presenta el efecto adicional de causar que las salidas pendientes y los caracteres introducidos sean descartados.

Hay varias formas de referirse a una tarea en la shell. El carácter '%' introduce una especifi-cación de tarea (espectarea).

Se puede referenciar al número de tarea n mediante '%n'. Los símbolos '%%' y '%+' se refieren a la noción de la shell de la tarea actual, la cual es la última tarea detenida mientras estaba en primer plano o que fue iniciada en segundo plano. Un único '%' (sin especificar ninguna tarea) también se refiere a la tarea actual. La tarea anterior puede ser referenciada utilizando '%-'. Si sólo hay una única tarea se puede usar tanto '%+' como '%-' para referirse a esa tarea. En salidas

Página 102

Page 103: manual de Bash 4.1

Capítulo 7: Control de tareas

pertenecientes a tareas (p.e., la salida del comando jobs), la tarea actual siempre se marca con un '+', y la tarea previa con un '-'.

También se puede referenciar a una tarea utilizando un prefijo del nombre usado para iniciarla, o 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.

7.2.- Comandos Internos para el Control de Tareasbg

bg [espectarea …]

Continúa cada tarea suspendida espectarea en segundo plano, como si hubiese sido iniciada con '&'. Si no se suministra espectarea se utiliza la tarea actual. El estado de retorno es cero a menos que sea ejecutado cuando el control de tareas no está activado o, cuando se ejecuta con el control de tareas activado y no se encuentra alguno de los espectarea o especifica una tarea que fue iniciada sin el control de tareas.

fgfg [espectarea]

Continua la tarea espectarea en primer plano y hace esta la tarea actual. Si no se suministra espectarea, se utiliza la tarea actual. El estado de retorno es el correspondiente al comando situado en primer plano, o distinto de cero si se ejecuta cuando el control de tareas está deshabilitado o, cuando el control de tareas está activado y espectarea no especifica una tarea válida o especifica una tarea que fue iniciada sin el control de tareas.

jobsjobs [-lnprs] [espectarea]jobs -x comando [argumentos]

La primera forma lista las tareas activas. Las opciones tienen los siguientes significados:

Página 103

Page 104: manual de Bash 4.1

Capítulo 7: Control de tareas

-l Lista los IDs de los procesos junto con la información habitual.

-n Muestra información únicamente sobre las tareas que han cambiado su estado desde la última vez que el usuario fue notificado de su estado.

-p Lista sólo los IDs de proceso del líder del grupo de procesos de la tarea.

-r Restringe la salida a las tareas en ejecución

-s Restringe la salida a las tareas detenidas.

Si se da espectarea, la salida se restringe a la información correspondiente a esa tarea. Si no se suministra espectarea se lista el estado de todas las tareas.

Si se suministra la opción '-x' las tareas reemplaza cualquier espectarea encontrado en comando o argumentos con el correspondiente ID del grupo de procesos, y ejecuta el comando pasándole argumentos y retornando su estado de salida.

killkill [-s especseñal] [-n numseñal] [-especseñal] espectarea

o pidkill -l [estado_de_salida]

Envía una señal especificada por especseñal o numseñal al proceso identificado mediante la especificación de tarea espectarea o el ID de proceso pid. especseñal es o bien un nombre de señal que no diferencia entre mayúsculas y minúsculas como SIGINT (con o sin el prefijo SIG) o un número de señal. Si especseñal y numseñal no están presentes se utiliza SIGTERM. La opción '-l' lista los nombres de señal. Si se proporciona algún argumento con la opción '-l' se listan los nombres de las señales que se corresponden con los argumentos, y el estado de retorno es cero. El estado_de_salida es un número que especifica un número de señal o el estado de salida de un proceso terminado por una señal. El estado de retorno es cero si al menos se envió correctamente una de las señalas y distinto de cero si ocurrió algún error o se encontró una opción inválida.

waitwait [espectarea o pid …]

Espera hasta que le proceso hijo especificado por cada ID de proceso pid o especifi-cación de tarea espectarea finaliza y devuelve el estado de salida del último comando por el que se ha esperado. Si se da una especificación de tarea, espera a que finalicen todos los procesos en la tarea. Si no se dan argumentos se espera a que finalicen todos los procesos hijos actualmente activos y el estado de retorno es cero. Si ningún espectarea o pid especifica un proceso activo que sea hijo de la shell el estado de retorno es 127.

disowndisown [-ar] [-h] [espectarea …]

Sin opciones se elimina cada espectarea de la tabla de tareas activas. Si se da la opción '-h' la tarea no es eliminada de la tabla, pero se marca de forma que no se envía la señal SIGHUP a la tarea si la shell recibe un SIGHUP. Si espectarea no está presente y no se suministran las opciones '-a' o '-r', se utiliza la tarea actual. Si no se suministra

Página 104

Page 105: manual de Bash 4.1

Capítulo 7: Control de tareas

espectarea la opción '-a' significa eliminar o marcar todas las tareas; la opción '-r' sin un argumento espectarea restringe la operación a las tareas en ejecución.

suspendsuspend [-f]

Suspende la ejecución de esta shell hasta que esta recibe una señal SIGCONT. Una shell de inicio de sesión no puede ser suspendida; se puede usar la opción '-f' para sobreescribir este comportamiento y forzar la suspensión.

Cuando el control de tareas no está activo, los comandos internos kill y wait no aceptan argumentos espectarea. Se les debe suministrar IDs de proceso.

7.3.- Variables para el Control de Tareasauto_resume

Esta variable controla la forma en la que la shell interacciona con el usuario y el control de tareas. Si esta variable existe entonces los comandos simples de una única palabra y sin redirecciones son tratadas como candidatas para reanudar una tarea existente. No se 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 105

Page 106: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

8.- Edición de la Línea de ComandosEste capítulo describe las características básicas de la interfaz de edición de la línea de comandos de GNU. La edición de la línea de comandos se proporciona mediante la librería Readline, la cual es usada por varios programas, incluyendo Bash. La edición de la línea de comandos está activada por defecto cuando se utiliza una shell interactiva, a menos que en la invocación de la shell se sumi-nistre la opción '--noediting'. La edición de la línea de comandos también se utiliza cuando se suministra la opción '-e' al comando interno read (vea la Sección 4.2 [Comandos Internos de Bash]). Por defecto, la edición de la línea de comandos es similar a la de emacs. También está disponible una interfaz de edición de la línea de comandos estilo vi. La edición de la línea de comandos se puede activar en cualquier momento usando las opciones '-o emacs' o '-o vi' del comando interno set (vea la Sección 4.3.1 [El Comando Interno Set]), o se puede desactivar usando las opciones '+o emacs' o '+o vi' del comando interno set.

8.1.- Introducción a la Edición de la Línea de Comandos.Los siguientes párrafos describen la notación usada para representar las pulsaciones de teclas.

El texto C-k se lee como 'Control-K' y describe el carácter producido cuando se presiona la tecla k mientras que se mantiene presionada la tecla Control.

El texto M-k se lee como 'Meta-K' y describe el carácter producido cuando se mantiene presio-nada la tecla Meta (si la tiene) y se presiona la tecla k. La tecla Meta se etiqueta como ALT en muchos teclados. En teclados con dos teclas etiquetadas como ALT (normalmente una a cada lado de la tecla espaciador), generalmente se establece la tecla ALT del lado izquierdo para trabajar como tecla Meta. La tecla ALT a la derecha puede también configurarse para ser usada como tecla Meta o puede ser configurada como algún otro modificador, tal como una tecla de composición para introducir caracteres acentuados.

Si no tiene una tecla Meta o ALT, o cualquier otra tecla funcionando como una tecla Meta, se puede generar la misma combinación de teclas pulsando primero la tecla ESC y a continuación la tecla k. Este proceso se conoce como “prefijar con Meta1 la tecla k.

El texto M-C-k se lee como 'Meta-Control-k' y describe el carácter producido por prefijar con Meta a C-k.

Adicionalmente, varias teclas tienen sus propios nombres, Concretamente, DEL, ESC, LFD, SPC, RET y TAB y permanecen como tales cuando aparecen en este texto, o en un fichero de iniciación (vea la Sección 8.3 [Fichero de Iniciación de Readline]). Si su teclado carece de una tecla LFD, teclear C-j producirá ese carácter. La tecla RET puede ser etiquetada como Return o Enter en algunos teclados.

8.2.- Interacción con ReadlineEn ocasiones durante una sesión interactiva, usted puede introducir una enorme línea de texto, para justo al final descubrir que la primera palabra de la línea está mal deletreada. La librería Readline le proporciona un conjunto de comandos para manipular el texto que introduce con el teclado, permi-tiéndole simplemente corregir su errata, sin verse forzado a reescribir la mayor parte de la línea. Usando estos comandos de edición, usted puede mover el cursor al lugar que necesita la corrección

1 En inglés metafying the k key

Página 106

Page 107: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

y borrar o insertar el texto de las correcciones. Luego, cuando esté satisfecho con la línea introducida, sólo tendrá que pulsar la tecla RET. No necesita estar al final de la línea para presionar RET; se acepta la línea completa independientemente de la localización del cursor.

8.2.1.- Los Fundamentos de Readline al DesnudoPara introducir caracteres en la línea lo único que debe hacer es teclearlos. Los caracteres introdu-cidos aparecen donde esté el cursor, y a continuación el cursor se desplaza un espacio hacia la derecha. Si teclea incorrectamente un carácter, puede usar el carácter de borrado para volver hacia atrás y borrar el carácter erróneo.

En ocasiones puede teclear un carácter incorrecto, y no percatarse del error hasta que ha intro-ducido varios caracteres adicionales. En este caso, puede teclear C-b para mover el cursor hacia la izquierda, y entonces corregir su error. A continuación puede mover el cursor hacia la derecha con C-f.

Cuando introduzca texto en medio de una línea, notará que los caracteres a la derecha del cursor son empujados para hacer sitio al texto que esté introduciendo. De forma similar, cuando borre texto detrás del cursor, los caracteres a la derecha del cursor son arrastrados para rellenar el espacio vacío creado por la eliminación del texto. A continuación se proporciona una lista de los fundamentos de la edición de texto en una línea de entrada.

C-b Retrocede un carácter.

C-f Avanza un carácter.

DEL o tecla de retroceso

Borra el carácter a la izquierda del cursor.

C-d Borra el carácter bajo el cursor.

Caracteres imprimibles

Inserta el carácter en la posición del cursor.

C-_ o C-x C-u

Deshace el último comando de edición. Puede deshacer todo lo hecho hasta volver a la línea vacía inicial.

(Dependiendo de la configuración, la tecla de retroceso borra el carácter a la izquierda del cursor y la tecla DEL borra el carácter bajo el cursor, como C-d, en vez del carácter a la izquierda del cursor).

8.2.2.- Comandos de Movimiento de ReadlineLa tabla siguiente describe las pulsaciones de teclas más fundamentales para editar la línea de entrada. Para su comodidad, se han añadido muchos otros comandos además de C-b, C-f, C-d y DEL. Aquí se dan algunos comandos para moverse más rápidamente por la línea de comandos.

C-a Se desplaza al principio de la línea.

C-e Se desplaza al final de la línea.

Página 107

Page 108: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

M-f Se desplaza una palabra hacia adelante, cuando la palabra está compuesta de letras y dígitos

M-b Se desplaza una palabra hacia atrás.

C-l Limpia la pantalla, reimprimiendo la línea actual en la parte superior de la pantalla.

Advierta cómo C-f desplaza un carácter hacia adelante, mientras que M-f desplaza una palabra hacia delante. Es una amplia costumbre que las teclas rápidas con Control trabajen con caracteres mientras que las teclas rápidas con Meta trabajan con palabras.

8.2.3.- Comandos para cortar texto de ReadlineCortar 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.

8.2.4.- Argumentos de ReadlineUsted puede pasar argumentos numéricos a los comandos de Readline. En ocasiones los argumentos actúan como un contador de repeticiones, otras veces estos son el signo del argumento que es signi-ficativo. Si introduce un argumento negativo a un comando que normalmente actúa hacia adelante, ese comando actuará hacia atrás. Por ejemplo, para cortar texto hacia atrás hasta el comienzo de la

Página 108

Page 109: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

línea, puede teclear 'M-- C-k'.La forma general de pasar argumentos numéricos a un comando es introducir meta dígitos

antes del comando. Si el primer 'dígito' tecleado es un signo menos ('-'), entonces el signo del argu-mento será negativo. Una vez que haya tecleado un meta dígito para comenzar el argumento, puede teclear el resto de los dígitos, y finalmente el comando. Por ejemplo, para darle al comando C-d un argumento de 10, podría teclear 'M-1 0 C-d', que borrará los siguientes 10 caracteres de la línea de entrada.

8.2.5.- Buscando Comandos en la HistoriaReadline proporciona comandos para buscar a través de la historia de comandos (vea la Sección 9.1 [Características de Historia de Bash]) a aquellas líneas que contengan una cadena especificada. Hay dos modos de búsqueda: incremental y no incremental.

Las búsquedas incrementales comienzan antes de que el usuario haya finalizado de teclear la cadena de búsqueda. Cada vez que se teclea un carácter de la cadena de búsqueda, Readline muestra la siguiente entrada de la historia que concuerda con la cadena tecleada hasta el momento. Una búsqueda incremental requiere sólo tantos caracteres como se necesite para encontrar la entrada deseada de la historia. Para buscar hacia atrás en la historia una cadena en particular, teclee C-r. Teclear C-s busca hacia adelante en la historia. Los caracteres presentes en el valor de la variable isearch-terminator se utilizan para finalizar una búsqueda incremental. Si esa variable no tiene asig-nado ningún valor, los caracteres ESC y C-J finalizarán la búsqueda incremental. C-g abortará una búsqueda incremental y restaura la línea original. Cuando la búsqueda termina, la entrada de la historia que contenga la cadena buscada se convierte en la línea actual.

Para encontrar otras entradas coincidentes en la lista de historia, teclee C-r o C-s, lo que sea más apropiado. Esto buscará hacia atrás o hacia adelante en la historia la siguiente entrada que encaje con la cadena tecleada hasta el momento. Cualquier otra secuencia de teclas enlazada a un comando de Readline terminará la búsqueda y ejecutará ese comando. Por ejemplo, un RET termi-nará la búsqueda y aceptará la línea, ejecutando el comando de la lista de historia. Un comando de movimiento terminará la búsqueda, hará que la última línea encontrada sea la línea actual y comen-zará la edición.

Readline recuerda la última cadena de búsqueda incremental. Si se teclean dos C-rs sin que intervengan caracteres que definan una nueva cadena de búsqueda, se utilizará cualquier cadena de búsqueda almacenada.

Las búsquedas no incrementales leen la cadena de búsqueda completa antes de comenzar a buscar las líneas de historia que concuerden. La cadena de búsqueda puede ser tecleada por el usuario o ser parte del contenido de la línea actual.

8.3.- El Fichero de Inicialización de ReadlineAunque la librería Readline viene con un juego de teclas rápidas tipo emacs instaladas por defecto, es posible usar un juego diferente de teclas rápidas. Cualquier usuario puede personalizar los programas que utiliza Readline poniendo comandos en un archivo inputrc, convencionalmente en su directorio home. El nombre de este fichero se toma del valor de la variable de shell INPUTRC. Si esta variable no está establecida, el valor por defecto es '~/.inputrc'. Si ese fichero no existe o no puede ser leído, el archivo por defecto en última instancia es '/etc/inputrc'.

Página 109

Page 110: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

Cuando comienza un programa que utiliza la librería Readline, se lee el fichero de iniciali-zación y se establecen las asociaciones de teclas.

Adicionalmente el comando C-x C-r relee este archivo de inicialización, de forma que incor-pore cualquier cambio que haya podido realizar en él.

8.3.1.- La Sintaxis del Fichero de Inicialización de ReadlineTan sólo existen unas pocas construcciones fundamentales permitidas en el archivo de inicialización de Readline. Las líneas en blanco son ignoradas. Las líneas que comienzan con un '#' son comentarios. Las líneas que comienzan con un '$' indican construcciones condicionales (vea la Sección 8.3.2 [Construcciones de Inicialización Condicionales]). Otras líneas indican definición de variables y asociaciones de teclas.

Definición de variablesUsted puede modificar el comportamiento de ejecución de Readline modificando los valores de las variables en Readline usando el comando set dentro del fichero de inicialización. La sintaxis es simple:

set variable valor

A continuación, por ejemplo, se muestra cómo cambiar desde las asociaciones de teclas por defecto tipo emacs a usar los comandos de edición de líneas tipo vi.

set editing-mode vi

Los nombres y valores de las variables, cuando corresponde, se reconocen sin dife-renciar entre mayúsculas y minúsculas. Los nombres de variable no reconocidos son ignorados.

Las variables de tipo booleano (aquellas que pueden ser establecidas a activas, on, o inactivas, off, se activan si el valor es nulo o vacío, on (sin distinguir mayúsculas y minúsculas), o 1. Cualquier otro valor resulta en la variable establecida como inactiva.

El comando bind -V lista los nombres y valores de las variables actuales de Readline. Vea la Sección 4.2 [Comandos Internos de Bash].

Se puede modificar gran parte del comportamiento de ejecución de Readline con las siguientes variables:

bell-styleControla qué ocurre cuando Readline quiere hacer sonar la campana del terminal. Si está establecida a 'none' Readline nunca hará sonar la campana. Si está establecida a 'visible'. Readline utilizará un aviso visible si alguno está disponible. Si está establecida a 'audible' (por defecto), Readline intentará hacer sonar la campana del terminal.

bind-tty-special-charsSi está activada ('on'), Readline intentará enlazar los caracteres de control tratados de forma especial por el driver de terminal del kernel con los equi-valentes de Readline.

comment-beginEs la cadena a insertar al comienzo de la línea cuando se ejecuta el comando insert-comment. El valor por defecto es “#”.

Página 110

Page 111: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

completion-ignore-caseSi está establecida en 'on', Readline realiza la concordancia y el completado de nombres de fichero de forma no sensible a mayúsculas y minúsculas. El valor por defecto es 'off'.

completion-prefix-display-lengthLa longitud en caracteres del prefijo común de una lista de completados posibles que se muestra sin modificación. Cuando se establece a un valor mayor que cero, los prefijos comunes más largos que este valor son reem-plazados con una elipsis cuando se muestran los completados posibles.

completion-query-itemsEl número de completados posibles que determina cuando se debe consultar al usuario si mostrar o no la lista de posibilidades. Si el número de completados posibles es mayor que este valor, Readline preguntará al usuario si desea verlos o no; en caso contrario serán simplemente listados. Esta variable debe ser establecida a un valor entero mayor o igual que cero. Un valor negativo significa que Readline nunca debería preguntar. El límite por defecto es 100.

convert-metaSi está establecida a 'on'. Readline convertirá los caracteres con el octavo bit establecido a una secuencia de teclas ASCII eliminando el octavo bit y prefijando un carácter ESC, de forma que los convierta en una secuencia de teclas meta-prefijadas. El valor por defecto es 'on'.

disable-completionSi está establecida en 'on'. Readline inhibirá el completado de palabras. Los caracteres de completado serán insertados en la línea como si hubieran sido mapeados para auto-insertarse. El valor por defecto es 'off'.

editing-modeLa variable editing-mode controla qué conjunto de teclas rápidas por defecto se utiliza. Por defecto, Readline comienza en el modo de edición de Emacs, donde la mayoría de las teclas rápidas son similares a las de Emacs. Esta variable puede tener el valor 'emacs' o 'vi'.

echo-control-charactersCuando está establecida en 'on' en sistemas operativos que indican que lo soportan, Readline mostrará un carácter correspondiente a una señal gene-rada desde el teclado. El valor por defecto es 'on'.

enable-keypadCuando está establecida en 'on'. Readline intentará activar el teclado de la aplicación cuando sea llamado. Algunos sistemas necesitan esto para activar las teclas de cursor (flechas). El valor por defecto es 'off'.

Página 111

Page 112: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

enable-meta-keyCuando está establecida en 'on'. Readline intentará activar cualquier tecla meta modificador que el terminal afirme soportar cuando sea llamado. En muchos terminales, la tecla Meta se utiliza para enviar caracteres de ocho bits. El valor por defecto es 'on'.

expand-tildeSi está establecida en 'on' se realizará expansión de tildes cuando Readline intente completar palabras. El valor por defecto es 'off'.

history-preserve-pointSi está establecida en 'on' el código de historia intentará situar el puntero (la posición actual del cursor) en la misma localización en cada línea de historia obtenida con previus-history o next-history. El valor por defecto es 'off'.

history-sizeEstablece el máximo número de entradas de historia guardadas en la lista de historia. Si se establece a cero, el número de entradas en la lista de historia no está limitada.

horizontal-scroll-modeEsta variable puede ser establecida a 'on' o 'off', Establecerla a 'on' significa que el texto de las líneas que están siendo editadas se desplazará horizontal-mente en una única línea de pantalla cuando estas sean más largas que la anchura de la pantalla, en vez de descender a una nueva línea de pantalla. Por defecto, esta variable está establecida a 'off'.

input-metaSi está establecida a 'on'. Readline activará la entrada de ocho bit (esto no limpiará el octavo bit en los caracteres que lea), sin importar lo que el terminal afirme que puede soportar. El valor por defecto es 'off'. El nombre meta-flag es un sinónimo para esta variable.

isearch-terminatorsLa 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.

keymapEstablece 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.

Página 112

Page 113: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

mark-directoriesSi está establecida a 'on', los nombres de directorio completados terminarán con una barra inclinada. El valor por defecto es 'on'.

mark-modified-linesEsta 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-directoriesSi 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-filesEsta 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-metaSi 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-completionsSi 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-horizontallySi 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'.

revert-all-at-newlineSi 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-ambiguousEsta 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

Página 113

Page 114: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

inmediatamente en vez de hacer sonar la campana. El valor por defecto es 'off'.

show-all-if-unmodifiedEsto 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-textSi 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-statsSi 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 teclasLa 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).

El comando bind -p muestra los nombres de funciones de Readline y sus asociaciones de forma que la salida pueda ser insertada directamente en un archivo de inicialización. Vea la Sección 4.2 [Comandos Internos de Bash].

nomTecla: nombre_función o macro

nomTecla es el nombre de la tecla deletreada en inglés. Por ejemplo:

Página 114

Page 115: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

Control-u: universal-argumentMeta-Rubout: backward-kill-wordControl-o: “> salida”

En el ejemplo anterior, C-u se enlaza a la función universal-argument, M-DEL se enlaza con la función backward-kill-word, y C-o se enlaza con la ejecución de la macro expresada en el lado derecho (esto es, insertar el texto '> salida' en la línea).

Se reconocen varios nombres de carácter simbólicos mientras que se procesa esta sintaxis de enlazado de teclas: DEL, ESC, ESCAPE, LFD, NEW-LINE, RET, RETURN, RUBOUT, SPACE, SPC y TAB.

“secTeclas”: nombre_funcion o macro

secTeclas se diferencia del anterior nomTeclas en que se puede especificar una secuencia completa de teclas, situando la secuencia de teclas entre dobles comillas. Se pueden usar algunas teclas de escape de tipo GNU Emacs, como en el ejemplo siguiente, pero los nombres de caracteres especiales no son reconocidos.

“\C-u”: universal-argument (argumento universal)“\C-x\C-r”: re-read-init-file (relee el archivo de

inicialización)“\e[11~”: “Tecla de Función 1” (tecla de función 1)

En el ejemplo anterior, C-u se asigna de nuevo a la función (universal-argument) (como en el primer ejemplo). 'C-x C-r' se asigna a la función re-read-init-file, y 'ESC [ 1 1 ~' se enlaza para insertar el texto “Tecla de Función 1”

Están disponibles las siguientes secuencias de escape de estilo GNU Emacs cuando se especifican secuencias de teclas:

\C- prefijo control

\M- prefijo meta

\e un carácter escapado

\\ barra invertida

\” “, una marca de dobles comillas

\' ', una comilla simple o apóstrofo

Adicionalmente a las secuencias de escape de estilo GNU Emacs, está disponible un segundo juego de caracteres escapados mediante barra invertida:

\a alerta (campana)

\b retroceso

\d borrado

\f

\n nueva línea.

Página 115

Page 116: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

\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\\”: “\\”

8.3.2.- Construcciones de inicialización condicionalesReadline implementa una característica similar en espíritu a las características de compilación condicional del preprocesador de C que permite que los asociaciones de teclas y los ajustes de variables se realicen como resultado de algunas comprobaciones. Hay cuatro directivas de análisis utilizadas.

$if La construcción $if permite que las asociaciones se hagan en base al modo de edición, el terminal que está siendo usado, o la aplicación que utiliza a Readline. El texto de la comprobación se extiende hasta el final de la línea; no se requiere ningún carácter para aislarla.

mode La forma mode= de la directiva $if se utiliza para comprobar cuando Readline se encuentra en modo emacs o vi. Esto se puede utilizar junto con el comando 'set keymap' por ejemplo, para establecer asociaciones en los mapas de teclado 'emacs-standard y emacs-ctlx sólo si Readline está iniciándose en modo emacs.

term La forma term= se puede utilizar para incluir asociaciones de teclas específicas del terminal, quizás para asociar las secuencias de teclas generadas por las teclas de función del terminal. La palabra a la derecha del '=' se compara con el nombre completo del terminal y con la porción anterior al primer '-' del nombre de terminal. Esto permite, por ejemplo, que sun encaje tanto con sun como con sun-cmd.

application

La construcción application se utiliza para incluir ajustes específicos para la aplicación. Cada programa que utilice la librería Readline establece el nombre de aplicación que podemos comprobar en busca de un valor en

Página 116

Page 117: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

particular. Esto se puede utilizar para enlazar secuencias de teclas a funciones útiles para un programa específico. Por ejemplo, el siguiente comando añade una secuencia de teclas que entrecomilla la palabra actual o previa en Bash:

$if Bash# Entrecomilla la palabra previa o la actual "\C-xq": "\eb\"\ef\""$endif

$endif Este comando, como se ve en el ejemplo anterior, termina un comando $if.

$else Los comandos en esta rama de la directiva $if se ejecutan si la comprobación falla.

$include

Esta directiva toma un único nombre de fichero como argumento y lee comandos y enlaces desde ese fichero. Por ejemplo, la siguiente directiva lee desde '/etc/inputrc':

$include /etc/inputrc

8.3.3.- Ejemplo de Fichero de InicializaciónA continuación tenemos un ejemplo de un fichero inputrc. Este muestra la asociación de teclas, la asignación de variables y la sintaxis condicional.

# This file controls the behaviour of line input editing for

# programs that use the GNU Readline library. Existing

# programs include FTP, Bash, and GDB.

#

# You can re-read the inputrc file with C-x C-r.

# Lines beginning with ’#’ are comments.

#

# First, include any systemwide bindings and variable

# assignments from /etc/Inputrc

$include /etc/Inputrc

#

# Set various bindings for emacs mode.

set editing-mode emacs

$if mode=emacs

Meta-Control-h: backward-kill-word Text after the function name is ignored

#

# Arrow keys in keypad mode

#

#"\M-OD": backward-char

#"\M-OC": forward-char

#"\M-OA": previous-history

#"\M-OB": next-history

Página 117

Page 118: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

#

# Arrow keys in ANSI mode

#

"\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

# An old-style binding. This happens to be the default.

TAB: complete

$if Bash

# edit the path"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"

# prepare to type a quoted word --

# insert open and close double quotes

# and move to just after the open quote

"\C-x\"": "\"\"\C-b"

# insert a backslash (testing backslash escapes

# in sequences and macros)

"\C-x\\": "\\"

# Quote the current or previous word

"\C-xq": "\eb\"\ef\""

# Add a binding to refresh the line, which is unbound

"\C-xr": redraw-current-line

# Edit variable on current line.

"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="

$endif

# use a visible bell if one is available

Página 118

Page 119: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

set bell-style visible

# don’t strip characters to 7 bits when reading

set input-meta on

# allow iso-latin1 characters to be inserted rather

# than converted to prefix-meta sequences

set convert-meta off

# display characters with the eighth bit set directly

# rather than as meta-prefixed characters

set output-meta on

# if there are more than 150 possible completions for

# a word, ask the user if he wants to see all of them

set completion-query-items 150

# For FTP

$if Ftp

"\C-xg": "get \M-?"

"\C-xt": "put \M-?"

"\M-.": yank-last-arg

$endif

8.4.- Comandos enlazables de ReadlineEsta sección describe comandos de Readline que pueden ser asociados a secuencias de teclas. Usted puede listar sus asociaciones de teclas ejecutando bind -P o bind -p (vea la Sección 4.2 [Comandos Internos de Bash]) para obtener un formato más escueto, apropiado para un fichero inputrc. Los nombres de comandos sin una secuencia de teclas adjunta son desligados por defecto.

En las descripciones siguientes, punto (point) se refiere a la posición actual del cursor, y marca (mark) se refiere a una posición del cursor guardada por el comando set-mark. El texto entre el punto y la marca se denomina región.

8.4.1.- Comandos de Movimientobeginning-of-line (C-a)

Avanza hasta el principio de la línea actual.

end-of-line (C-e)Retrocede hasta el final de la línea.

forward-char (C-f)Desplaza un carácter hacia adelante.

backward-char (C-b)Desplaza un carácter hacia atrás.

forward-word (M-f)Avanza hasta el final de la siguiente palabra. Las palabras están compuestas de letras y

Página 119

Page 120: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

dígitos.

backward-word (M-b)Retrocede hasta el comienzo de la palabra actual o la palabra previa. Las palabras están compuestas de letras y dígitos.

shell-forward-word ()Avanza hasta el final de la siguiente palabra. Las palabras están delimitadas por metacaracteres de la shell no entrecomillados.

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.

8.4.2.- Comandos para Manipular la Historiaaccept-line (Nueva_línea o Return)

Acepta la línea sin importar donde esté el cursor. Si esta línea no está vacía, la añade a la lista de historia de acuerdo a los ajustes de las variables HISTCONTROL y HISTIGNORE. Si esta línea es una línea de historia modificada, entonces devuelve la línea de historia a su estado original.

previous-history (C-p)Retrocede en la lista de historia, obtiene el comando previo.

next-history (C-n)Avanza en la lista de historia, obtiene el comando siguiente.

beginning-of-history (M-<)Mueve a la primera línea en la historia

end-of-history (M->)Mueve al final de la historia, esto es, la línea que se está introduciendo actualmente

reverse-search-history (C-r)Busca hacia atrás comenzando en la línea actual y moviéndose hacia arriba a través de la historia tanto como sea necesario. Esta es una búsqueda incremental.

forward-search-history (C-s)Busca hacia adelante comenzando en la línea actual y moviéndose hacia abajo a través de la historia tanto como sea necesario. Esta es una búsqueda incremental.

non-incremental-reverse-search-history (M-p)Busca hacia atrás comenzando en la línea actual y moviéndose hacia arriba a través de la historia tanto como sea necesario utilizando una búsqueda no incremental para una

Página 120

Page 121: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

cadena suministrada por el usuario.

non-incremental-forward-search-history (M-n)Busca hacia adelante comenzando en la línea actual y moviéndose hacia abajo a través de la historia tanto como sea necesario utilizando una búsqueda no incremental para una cadena suministrada por el usuario.

history-search-forward ()Busca hacia adelante a través de la historia para la cadena de caracteres entre el comienzo de la línea actual y el punto. Esta es una búsqueda no incremental. Por defecto, este comando no está asociado a ninguna tecla.

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 '!$'.

8.4.3.- Comandos para Modificar el Textodelete-char (C-d)

Borra el carácter en el punto. Si el punto está el comienzo de la línea, no hay caracteres en la línea, y el último carácter introducido no está asociado a delete-char, entonces devuelve EOF.

backward-delete-char (Rubout)Borra el carácter detrás del cursor. Un argumento numérico significa cortar los caracteres en vez de eliminarlos.

forward-backward-delete-char ()Borra el carácter bajo el cursor, a menos que el cursor esté al final de la línea, en cuyo caso se borra el carácter detrás del cursor. Por defecto no está asociado a ninguna tecla.

quoted-insert (C-q o C-v)Añade el siguiente carácter introducido a la línea tal cual. Así se pueden insertar secuencias de teclas como C-q, por ejemplo.

self-insert (a, b, A, 1, !, …)Se insertan a sí mismas

Página 121

Page 122: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

transpose-chars (C-t)Arrastra el carácter anterior al cursor hacia adelante sobre el carácter en la posición del cursor, avanzando también el cursor. Si el punto de inserción está al final de la línea, entonces esto transpone los dos últimos caracteres de la línea.

transpose-words (M-t)Arrastra la palabra anterior al punto hasta la palabra sobre la que se encuentra el punto, o la siguiente si el punto está en un separador de palabras, avanzando también el punto hasta justo después de la segunda palabra.

upcase-word (M-u)Cambia a mayúsculas la palabra actual (o la siguiente). Con un argumento negativo, cambia a mayúsculas la palabra anterior, pero no mueve el cursor.

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.

8.4.4.- Cortando y Pegandokill-line (C-k)

Corta el texto desde el punto hasta el final de la línea

backward-kill-line (C-x Rubout)Corta hacia atrás hasta el comienzo de la línea.

unix-line-discard (C-u)Corta hacia atrás desde el cursor hasta el comienzo de la línea.

kill-whole-line ()Corta todos los caracteres en la línea actual, no importa donde esté el punto. Por defecto no está asociado a ninguna tecla.

Página 122

Page 123: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

kill-word (M-d)Corta desde el punto hasta el final de la palabra actual, o si se encuentra entre palabras, hasta el final de la siguiente palabra. Los límites de palabra son los mismos que en forward-word.

backward-kill-word (M-DEL)Corta la palabra anterior al punto. Los límites de palabra son los mismos que en backward-word.

shell-kill-word ()Corta desde el punto hasta el final de la palabra actual, o si se encuentra entre palabras, hasta el final de la siguiente palabra. Los límites de palabra son los mismos que en shell-forward-word.

backward-kill-word ()Corta la palabra anterior al punto. Los límites de palabra son los mismos que en shell-backward-word.

unix-word-rubout ()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.

Página 123

Page 124: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

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.

8.4.5.- Especificando Argumentos Numéricosdigit-argument (M-0, M-1, …, M--)

Añade este dígito al argumento existente acumulativamente, o inicia un nuevo argumento. M-- comienza un argumento negativo.

universal-argument ()Esta es otra forma de especificar un argumento. Si este comando es seguido de uno o más dígitos, opcionalmente con un signo menos al comienzo, estos dígitos definen el argumento. Si el comando es seguido por dígitos, ejecutar universal-argument de nuevo finaliza el argumento numérico pero en caso contrario no se tiene en cuenta. Como caso especial, si este comando es seguido inmediatamente por un carácter que no es un dígito ni un signo menos, el número del argumento para el siguiente comando se multiplica por cuatro. El número de argumento inicialmente es uno, de forma que ejecutar esta función la primera vez hace que el número de argumento sea cuatro, una segunda vez hace que el número de argumento sea dieciséis, y así sucesivamente. Por defecto este comando no está asociado a ninguna tecla.

8.4.6.- Permitiendo que Readline introduzca caracteres por tícomplete (TAB)

Intenta realizar un completado en el texto anterior al punto. El completado actual es específico de la aplicación. Bash intenta completar tratando el texto como una variable (si el texto comienza con '$'), un nombre de usuario (si el texto comienza con '~'), un nombre de anfitrión (si el texto comienza con '@'), o un comando (incluyendo alias y funciones) por ese orden. Si ninguno de estos intentos produce una concordancia, se intenta un completado de nombres de fichero.

possible-completions (M-?)Lista los completados posibles del texto anterior al punto.

insert-completions (M-*)Inserta todos los completados del texto anterior al punto que habrían sido generados por possible-completions.

menu-complete ()Similar a complete, pero reemplaza la palabra a completar con una única concordancia de la lista de completados posibles. La ejecución repetida de menu-complete avanza a través de la lista de posibles completados, insertando cada concordancia por orden. Al final de la lista de completados, se hace sonar una campana (obedeciendo al valor de

Página 124

Page 125: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

bell-style) y se restaura el texto original. Un argumento n mueve n posiciones hacia adelante en la lista de concordancias; se puede utilizar un argumento negativo para desplazarse hacia atrás en la lista. Este comando busca estar asociado a TAB, pero no está asociado por defecto.

menu-complete-backward ()Es idéntico a menu-complete, salvo que se desplaza hacia atrás en la lista de completados posibles, como si se hubiese proporcionado un argumento negativo a menu-complete.

delete-char-or-list()Borra el carácter bajo el cursor si no está al principio o al final de la línea (como delete-char). Si está al final de la línea se comporta de forma idéntica a possible-completions. Este comando no está asociado por defecto.

complete-filename (M-/)Intenta un completado de nombres de fichero en el texto anterior al punto.

possible-filename-completions (C-x /)Lista los posibles completados del texto anterior al punto, tratándolo como un nombre de fichero.

complete-username (M-~)Intenta el completado del texto anterior al punto, tratándolo como un nombre de usuario.

possible-username-completions (C-x ~)Lista los completados posibles del texto anterior al punto, tratándolo como un nombre de usuario.

complete-variable (M-$)Intenta el completado del texto anterior al punto, tratándolo como una variable de shell.

possible-variable-completions (C-x $)Lista los completados posibles del texto anterior al punto, tratándolo como una variable de 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.

Página 125

Page 126: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

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]).

8.4.7.- Macros de Tecladostart-kbd-macro (C-x ()

Inicia la grabación de los caracteres introducidos dentro de la macro de teclado actual.

end-kbd-macro (C-x ))Detiene la grabación de los caracteres introducidos en la macro de teclado actual y guarda la definición.

call-last-kbd-macro (C-x e)Vuelve a ejecutar la macro de teclado definida más recientemente, haciendo que los caracteres introducidos en la macro aparezcan como si hubiesen sido introducidos por el teclado.

8.4.8.- Algunos comandos variadosre-read-init-file (C-x C-r)

Lee el contenido del fichero inputrc y añade cualquier asociación o asignación de variable que encuentre en él.

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.

Página 126

Page 127: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

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 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

Página 127

Page 128: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

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]).

alias-expand-line ()Realiza expansión de alias en la línea actual (vea la Sección 6.6 [Alias]).

Página 128

Page 129: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

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.

8.5.- Modo vi de ReadlineAunque la librería Readline no tiene un juego completo de funciones de edición de vi, sí contiene lo suficiente para permitir la edición simple de la línea. El modo vi de Readline se comporta como se especifica en el estándar POSIX 1003.2.

Se utilizan los comandos 'set -o emacs' y 'set -o vi' para intercambiar interactivamente entre los modos de edición emacs y vi (vea la Sección 4.3.1 [El Comando Interno Set]). El modo por defecto de Readline es el modo emacs.

Cuando introduzca una línea en el modo de edición de vi, se encontrará en el modo de inserción cómo si hubiese introducido una 'i'. Presionar ESC le cambiará al modo 'command', donde podrá editar el texto de la línea con las teclas de movimiento estándares de vi, moverse a las líneas anteriores de la historia con 'k' y a las líneas siguientes con 'j', y así sucesivamente.

8.6.- Completado ProgramableLas características de completado programable se invocan cuando se intenta un completado de palabra para un argumento de un comando para el cual se ha definido una especificación de completado (un compspec) usando el comando interno complete (vea la Sección 8.7 [Comandos Internos para el Completado Programable]).

Primero, se identifica el nombre del comando. Si se ha definido un compspec para ese comando este se utiliza para generar la lista de completados posibles para la palabra. Si la palabra es la cadena vacía (se intenta el completado al inicio de una línea vacía), se utiliza cualquier compspec definido con la opción '-E' del comando interno complete. Si la palabra es una ruta completa, primero se busca un compspec para la ruta completa. Si no se encuentra un compspec para la ruta completa, se intenta encontrar un compspec para la parte que sigue a la última barra inclinada. Si estas búsquedas no encuentran un compspec, se utilizará por defecto cualquier compspec definido con la opción '-D' del comando interno complete.

Una vez que se ha encontrado un compspec, este se utiliza para generar la lista de palabras concordantes. Si no se encuentra ningún compspec, se realiza el completado por defecto de Bash descrito anteriormente (vea la Sección 8.4.6 [Comandos para Completado]).

Primero, se utilizan las acciones especificadas por el compspec. Sólo se devuelven las palabras que son prefijadas por la palabra que está siendo completada. Cuando se utiliza la opción '-f' o '-d'

Página 129

Page 130: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

para un completado de nombre de fichero o de directorio, se utiliza la variable de shell FIGNORE para filtrar las concordancias. Vea la Sección 5.2 [Variables de Bash], para una descripción de FIGNORE.

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

Página 130

Page 131: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

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.

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

8.7.- Comandos Internos para el Completado ProgramableEstán disponibles dos comandos internos para manipular las características de completado programable

compgencompgen [opción] [palabra]

Genera completados posibles coincidentes para palabra de acuerdo con las opciones, las

Página 131

Page 132: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

cuales pueden ser cualquier opción aceptada por el comando interno complete con la excepción de '-p' y '-r', y escribe las coincidencias en la salida estándar. Cuando se utiliza la opción '-F' o la opción '-C' las variables de la shell ajustadas por las características de completado programable, mientras estén disponibles, no tendrán valores útiles.

Las coincidencias se generarán de la misma forma que si hubieran sido generadas directamente por el código de completado programable desde una especificación de completado con las mismas banderas. Si se especifica palabra, sólo se mostrarán aquellos completados que concuerden con palabra.

El valor devuelto es true a menos que se suministre alguna opción inválida o no se genere ninguna coincidencia.

completecomplete [-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

Página 132

Page 133: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

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 cualquier coincidencia se añade a los resultados de las otras acciones.

-A acción

La acción puede ser una de las siguientes para generar una lista de completados posibles:

alias Nombres de alias. También se puede especificar con '-a'.

arrayvar Nombres de variables de tipo array.

binding Nombres de asociaciones de teclas de Readline (vea la Sección 8.4 [ Comandos de Readline Enlazables]).

builtin Nombres de comandos internos de la shell. También se puede especificar con '-b'.

command

Nombres de comandos. También se puede especificar con '-c'.

directory Nombres de directorio. También se puede especificar con '-d'.

disabled Nombres de comandos internos de la shell deshabilitados.

enabled Nombres de comandos internos de la shell habilitados.

export Nombres de variables de la shell exportadas. También se puede especificar con '-e'.

file Nombres de ficheros. También se puede especificar con '-f'.

function Nombres de funciones de la shell.

group Nombres de grupos. También se puede especificar con '-g'.

helptopic

Página 133

Page 134: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

Temas de ayuda como los aceptados por el comando interno help (vea la Sección 4.2 [Comandos Internos de Bash]).

hostname

Nombres de anfitrión (Host), tal como se toman desde el archivo especificado por la variable de la shell HOSTFILE (vea la Sección 5.2 [Variables de Bash]).

job Nombres de tareas, si el control de tareas está activo. También se puede especificar con '-j'.

keyword Palabras reservadas de la shell. También se puede especificar con '-k'.

running Nombres de tareas en ejecución, si el control de tareas está activo.

service Nombres de servicio. También se puede especificar con '-s'.

setopt Argumentos válidos para la opción '-o' del comando interno set (vea la Sección 4.3.1 [El Comando Interno Set]).

shopt Nombres de opciones de la shell aceptadas por el comando interno shopt (vea la Sección 4.2 [Comandos Internos de Bash]).

signal Nombres de señal.

stopped Nombres de tareas detenidas, si el control de tareas está activo.

user Nombres de usuario. También se puede especificar con '-u'.

variable Nombres de variables de la shell. También se puede especificar con '-v'.

-G patglob

El patrón de expansión de nombres de fichero patglob se expande para generar los completados posibles.

-W listaPalabras

La listaPalabras se separa usando los caracteres en la variable especial IFS como delimitadores, y cada palabra resultante es expandida. Los completados posibles son los miembros de la lista resultante que concuerdan con la palabra que está siendo completada.

-C comando

Se ejecuta el comando en un entorno de subshell, y su salida se utiliza como los completados posibles.

-F funcion

La función de shell funcion se ejecuta en el entorno de shell actual. Cuando a finaliza, se obtienen los completados posibles del valor de la variable de tipo array COMPREPLY.

Página 134

Page 135: manual de Bash 4.1

Capítulo 8: Edición de la línea de comandos

-X patfiltro

patfiltro es un patrón como los usados para la expansión de nombres de fichero. Este se aplica a la lista de completados posibles generados por las opciones y argumentos anteriores, y se elimina cada completado que concuerde con patfiltro. Un '!' marginal niega el patrón; en este caso, se elimina cualquier completado que no concuerde con patfiltro.

-P prefijo

Se añade prefijo al comienzo de cada posible completado después de que hayan sido aplicadas todas las demás opciones.

-S sufijo

Se añade sufijo al final de cada posible completado después de que hayan sido aplicadas todas las demás opciones.

El valor devuelto es true a menos que se suministre una opción inválida, se suministre alguna opción distinta de '-p' o '-r' sin un argumento nombre, se intente eliminar una especificación de completado para un nombre para el que no exista especificación u ocurra un error añadiendo una especificación de completado.

compoptcompopt [-o opción] [-DE] [+ opción] [nombre]

Modifica las opciones de completado para cada nombre de acuerdo con las opciones dadas, o para el completado actualmente en ejecución si no se suministran nombres. Si no 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 135

Page 136: manual de Bash 4.1

Capítulo 9: Usando la Historia Interactivamente

9.- Usando la Historia InteractivamenteEste capítulo describe como usar la Librería de Historia de GNU interactivamente, desde la posición de un usuario, por lo que debería considerarse como una guía de usuario. Para información sobre la utilización de la Librería de Historia de GNU en otros programas, vea el Manual de la Librería Readline de GNU.

9.1.- Características de Historia de BashCuando se activa la opción '-o history' para el comando interno set (vea la Sección 4.3.1 [El Comando Interno Set]), la shell proporciona acceso a la historia de comandos, la lista de comandos introducidos anteriormente. Se utiliza el valor de la variable de la shell HISTSIZE como el número de comandos a guardar en una lista de historia. Se almacena el texto de los últimos $HISTSIEZE comandos (por defecto 500). La shell almacena cada comando en la lista de historia antes de realizar la expansión de parámetros y variables pero después de realizar la expansión de la historia, obedeciendo a los valores de las variables de shell HISTIGNORE y HISTCONTROL.

Al inicio de la shell, la historia se inicializa desde un fichero cuyo nombre viene dado por la variable HISTFILE (por defecto '~/.bash_history'). Si es necesario se trunca el contenido del fichero cuyo nombre viene dado por el valor de HISTFILE, para que no contenga más que el número de líneas especificado por el valor de la variable HISTFILESIZE. Cuando una shell interactiva finaliza, las últimas $HISTSIZE líneas se copian desde la lista de historia al fichero cuyo nombre viene dado por $HISTFILE. Si está establecida la opción de la shell histappend (vea la Sección 4.2 [Comandos Internos de Bash]), las líneas se añaden al final del archivo de historia, en caso contrario se sobreescribe el fichero de historia. Si HISTFILE no está establecida, o si el fichero de historia no es modificable, la historia no se guarda. Después de guardar la historia, el fichero de historia se trunca para no contener más de $HISTFILESIZE líneas. Si HISTFILESIZE no está establecida, no se realiza ningún truncado.

Si HISTTIMEFORMAT está establecida, se escribe en el archivo de historia la información de marca de tiempo asociada con cada entrada de la historia, marcada con el carácter de comentario de la historia. Cuando se lee el fichero de la historia, las líneas que comienzan con el carácter de comentario de la historia seguido inmediatamente por un dígito se interpretan como marcas de tiempo para la línea de historia previa.

Se puede utilizar el comando interno fc para listar o editar y volver a ejecutar una porción de la lista de historia. El comando interno history puede utilizarse para mostrar o modificar la lista de historia y manipular el fichero de historia. Cuando se utiliza la edición de línea de comandos, los comandos de búsqueda están disponibles en cada modo de edición que proporcione acceso a la lista de historia (vea la Sección 8.4.2 [Comandos para la Historia]).

La shell permite controlar qué comandos son guardados en la lista de historia. Se pueden establecer las variables HISTCONTROL e HISTIGNORE para hacer que la shell guarde sólo un subconjunto de los comandos introducidos. La opción de shell cmdhist, si está activada, produce que la shell intente guardar cada línea de un comando multilínea en la misma entrada de la historia, añadiendo punto y coma donde sea necesario para mantener la corrección semántica. La opción de la shell lithist produce que la shell guarde el comando con caracteres nueva línea embebidos en vez de con punto y coma. Se utiliza el comando interno shopt para establecer estas opciones. Vea

Página 136

Page 137: manual de Bash 4.1

Capítulo 9: Usando la Historia Interactivamente

la Sección 4.2 [Comandos Internos de Bash], para una descripción del comando interno shopt.

9.2.- Comandos Internos para la Historia de BashBash proporciona dos comandos internos que manipulan la lista de historia y el fichero de historia

fcfc [-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]).

historyhistory [n]history -chistory -d desplazamientohistory [-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

Página 137

Page 138: manual de Bash 4.1

Capítulo 9: Usando la Historia Interactivamente

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.

-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.

9.3.- Expansión de la HistoriaLa librería de Historia proporciona una característica de expansión de la historia que es similar a la expansión de la historia que proporciona csh. Esta sección describe la sintaxis utilizada para manipular la información de la historia.

Las expansiones de la historia introducen palabras desde la lista de historia en el flujo de entrada, facilitando el repetir comandos, insertar argumentos a un comando previo en la línea de entrada actual, o corregir errores en comandos anteriores rápidamente.

Las expansiones de la historia tienen lugar en dos partes. La primera consiste en determinar qué linea de la lista de historia se debe utilizar durante la sustitución. La segunda consiste en seleccionar partes de dicha línea para insertarlas en la línea actual. La línea seleccionada de la historia se denomina evento, y las porciones de dicha línea sobre las que se actúa se denominan palabras. Están disponibles varios modificadores para manipular las palabras seleccionadas. La línea se divide en palabras de la misma forma que lo hace Bash, de manera que varias palabras encerradas entre comillas se consideran una palabra. Las expansiones de historia se inician por la aparición del carácter de expansión de historia, que por defecto es '!'. Sólo se puede utilizar '\' y ''' para escapar el carácter de expansión de la historia.

Se pueden utilizar varias opciones de la shell modificables con el comando interno shopt para adaptar el comportamiento de la expansión de la historia. Si está activada la opción de shell histverify, y se está utilizando Readline, las sustituciones de la historia no se pasan inmediatamente al analizador de la shell. En vez de eso, la línea expandida se recarga en el buffer de edición de Readline para posteriores modificaciones. Si se está utilizando Readline, y la opción

Página 138

Page 139: manual de Bash 4.1

Capítulo 9: Usando la Historia Interactivamente

de shell histreedit está activada, una expansión de la historia fallida se recargará en el buffer de edición de Readline para su corrección. Puede utilizarse la opción '-p' del comando interno history para ver lo que hará la expansión de historia antes de usarla. Se puede utilizar la opción '-s' del comando interno history para añadir comandos al final de la lista de historia sin ejecutarlos realmente, de forma que pueden estar disponibles para rellamadas posteriores. Esto es más útil utilizado junto con Readline.

La shell permite controlar varios caracteres usados en el mecanismo de expansión de la historia con la variable histchars, como se explicó anteriormente (vea la Sección 5.2 [Variables de Bash]). La shell utiliza el carácter de comentario de la historia para señalar las marcas de tiempo de la historia cuando escribe el fichero de historia.

9.3.1.- Designadores de EventoUn designador de eventos es una referencia a una entrada de la línea de comandos en la lista de historia.

! Inicia una sustitución de la historia, excepto cuando es seguido de un espacio, una tabulación, el final de línea, '=' o '(' (cuando la opción de shell extglob está activada usando el comando interno shopt).

!n Referencia al comando de la línea n

!-n Referencia al comando situado n líneas atrás

!! Referencia al comando previo. Este es un sinónimo para '!-1'

!cadena Referencia al comando mas reciente que comienza con cadena.

!?cadena[?]

Referencia al comando más reciente que contiene cadena. El '?' final puede omitirse si la cadena es seguida inmediatamente por una nueva línea.

^cadena1^cadena2^

Sustitución rápida. Repite el último comando, reemplazando cadena1 con cadena2. Es equivalente a !!:s/cadena1/cadena2/.

!# La línea de comandos introducida hasta el momento.

9.3.2.- Designadores de PalabraLos designadores de palabra se utilizan para seleccionar las palabras deseadas del evento. Un ':' separa la especificación del evento del designador de palabra. Este puede omitirse si el designador de palabra comienza con un '^', '$', '*', '-' o '%'. Las palabras son numeradas desde el comienzo de la línea, con la primera palabra denotada por 0 (cero). Las palabras se insertan en la línea actual separadas por espacios individuales.

Por ejemplo,

!! designa el comando anterior. Cuando introduce esto, se repite el comando anterior completamente.

!!:$ designa el último argumento del comando anterior. Puede abreviarse a !$

Página 139

Page 140: manual de Bash 4.1

Capítulo 9: Usando la Historia Interactivamente

!fi:2 designa el segundo argumento del comando más reciente que comienza con las letras 'fi'.

Los designadores de palabra son los siguientes:

0 (cero)

La palabra número 0. Para muchas aplicaciones es el propio comando.

n La n-ésima palabra.

^ El primer argumento, esto es, la palabra 1.

$ El último argumento.

% La palabra encontrada por la búsqueda '?cadena?' más reciente.

x-y Un rango de palabras; '-y' es una forma abreviada para '0-y'.

* Todas las palabras, excepto la número 0. Este es un sinónimo para '1-$'. No es un error utilizar '*' si hay justo una palabra en el evento; en tal caso de devuelve la cadena vacia.

x* Es una abreviatura para 'x-$'.

x- Es una abreviatura para 'x-$' como 'x*', pero omite la última palabra.

Si se suministra un designador de palabra sin una especificación de evento, se utiliza como evento el comando anterior.

9.3.3.- ModificadoresTras el designador de palabra opcional se puede añadir una secuencia de uno o más de los siguiente modificadores, cada uno precedido por un ':'

h Elimina un componente de ruta del final, dejando sólo la cabeza (head).

t Elimina todos los componentes de ruta, dejado sólo la cola (tail).

r Elimina un sufijo de la forma '.sufijo', dejando el nombre base.

e Elimina todo menos el sufijo final.

p Imprime el nuevo comando pero no lo ejecuta.

q Entrecomilla las palabras sustituidas, protegiéndolas de sustituciones posteriores.

X Entrecomilla las palabras sustituidas, como con 'q' pero separa en palabras en función de los espacios, tabulaciones y nuevas líneas.

S/viejo/nuevo/

Sustituye nuevo por la primera ocurrencia de viejo en la línea de evento. Se puede utilizar cualquier delimitador en lugar de '/'. Se puede citar un carácter delimitador en viejo y nuevo protegiéndolo con una barra invertida. Si nuevo contiene '&' este es reemplazado por viejo. Se puede proteger el carácter '&' con una barra invertida. El delimitador final es opcional si es el último carácter en la línea de entrada.

Página 140

Page 141: manual de Bash 4.1

Capítulo 9: Usando la Historia Interactivamente

& Repite la sustitución anterior.

g

a Provoca que los cambios se apliquen sobre la línea de evento completa. Se usa junto con 's', como en gs/nuevo/viejo/, o con '&'.

G Aplica el siguiente modificador 's' una vez a cada palabra en el evento.

Página 141

Page 142: manual de Bash 4.1

Capítulo 10: Instalando Bash

10.- Instalando BashEste capítulo proporciona instrucciones básicas para instalar Bash en las múltiples plataformas soportadas. La distribución soporta los sistemas operativos GNU, casi cualquier versión de Unix, y varios sistemas no-Unix como BeOS e Interix. Existen otras implementaciones independientes para las plataformas MS-DOS, OS/2, y Windows.

10.1.- Instalación BásicaEstas son las instrucciones de instalación para Bash.

La forma más fácil de compilar Bash es:1. cd al directorio que contiene el código fuente y escriba './configure' para configurar

Bash para su sistema. Si está usando csh o alguna versión antigua de System V, podría necesitar introducir 'sh ./configure' en vez de lo anterior para evitar que csh intente ejecutar configure por sí mismo.Ejecutar configure toma algún tiempo. Mientras que se ejecuta, imprime mensajes que informan sobre las características que está comprobando.

2. Escriba 'make' para compilar Bash y construir el guión de reporte de errores bashbug.3. Opcionalmente escriba 'make tests' para ejecutar el juego de comprobaciones de Bash.4. Escriba 'make install' para instalar bash y bashbug. Esto también instalará las páginas

del manual y el fichero info.El script de shell configure intenta encontrar los valores correctos para múltiples variables

dependientes del sistema que se utilizan durante la compilación. Este utiliza estos valores para crear un 'Makefile' en cada directorio del paquete (el directorio principal, los directorios 'builtins', 'doc' y 'support', cada uno de los directorios bajo 'lib' y algunos más). Este también crea un fichero 'config.h' que conitiene definiciones dependientes del sistema. Finalmente, crea un script de shell denominado config.status que usted puede ejecutar en el futuro para recrear la configuración actual, un fichero 'config.cache' que guarda los resultados de los test para acelerar la reconfiguración, y un fichero 'config.log' que contiene la salida de compilación (útil principalmente para depurar configure). Si 'config.cache' contiene en algún punto resultados que usted no quiera mantener, puede eliminarlos o editarlos.

Para encontrar más información acerca de las opciones y argumentos que acepta el script configure introduzca

bash-2.04$ ./configure –help

en el prompt de bash en su directorio de fuentes de Bash.Si necesita hacer cosas inusuales para compilar Bash, intente entender como podría configure

comprobar cuando realizarlas y cuando no, y envíe las diferencias o las instrucciones a [email protected] de forma que estas puedan ser consideradas para la próxima publicación.

El fichero 'configure.in' se utiliza para crear configure mediante un programa denominado Autoconf. Sólo necesita el 'configure.in' si desea cambiar o regenerar el script configure utilizando una nueva versión de Autoconf. Si hace esto, asegúrese de estar usando una versión de Autoconf igual o superior a la 2.50.

Puede eliminar los binarios del programa y los ficheros objeto desde el directorio del código fuente introduciendo 'make clean'. Para eliminar todos los ficheros creados por configure (de

Página 142

Page 143: manual de Bash 4.1

Capítulo 10: Instalando Bash

forma que pueda compilar Bash para un tipo diferente de computador), introduzca 'make distclean'.

10.2.- Compiladores y OpcionesAlgunos sistemas requieren opciones inusuales para compilar o enlazar desconocidas para el script configure. Usted puede proporcionar a configure valores iniciales para algunas variables estableciendo estos en el entorno. Utilizando una shell compatible con la shell Bourne, puede hacer esto con un comando como este:

CC=c89 CFLAGS=-02 LIBS=-lposix ./configure

En sistemas que tienen el programa env, puede hacer esto como:env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure

El proceso de configuración utiliza GCC, si está disponible, para construir Bash.

10.3.- Compilando para Múltiples ArquitecturasPuede compilar Bash para más de un tipo de computador al mismo tiempo situando los ficheros objetos para cada arquitectura en su propio directorio. Para hacer esto, debe utilizar una versión de make que soporte la variable VPATH, como el make de GNU. cd al directorio donde quiera que vayan los ficheros objetos y los ejecutables y ejecute el guión de comandos, configure desde el directorio fuente. Puede necesitar suministrar el argumento '--srcdir=RUTA' para indicarle a configure donde están los ficheros fuente. configure buscará automáticamente el código fuente en el directorio en el que está configure y en '..'.

Si tiene que usar un make que no soporta la variable VPATH, puede compilar Bash para una arquitectura cada vez en el directorio del código fuente. Después de que haya instalado Bash para una arquitectura, utilice 'make distclean' antes de reconfigurar para otra arquitectura.

Alternativamente, si su sistema soporta enlaces simbólicos, puede utilizar el guión de comandos 'support/mkclone' para crear un árbol de construcción que tenga enlaces simbólicos a cada fichero en el directorio fuente. A continuación le mostramos un ejemplo que crea un directorio de construcción en el directorio actual desde un directorio fuente '/usr/gnu/src/bash-2.0':

bash /usr/gnu/src/bash-2.0/support/mkclone -s /usr/gnu/src/bash-2.0 .

El script mkclone requiere Bash, debe tener construido Bash al menos para una arquitectura antes de poder crear directorios de construcción para otras arquitecturas.

10.4.- Nombres de InstalaciónPor defecto, 'make install' instalará en '/usr/local/bin', '/usr/local/man', etc. Puede especificar un prefijo de instalación distinto de '/usr/local' proporcionando a configure la opción '--prefix=RUTA', o especificando un valor para la variable de 'make' DESTDIR cuando ejecute 'make install'.

Puede especificar prefijos de instalación separados para ficheros específicos de la arquitectura y ficheros independientes de la arquitectura. Si proporciona a configure la opción '--exec-prefix=RUTA', 'make install' usará RUTA como prefijo para instalar programas y librerías. La documentación y otros ficheros de datos seguirán usando el prefijo habitual.

Página 143

Page 144: manual de Bash 4.1

Capítulo 10: Instalando Bash

10.5.- Especificando el Tipo de SistemaPuede haber algunas características que configure no pueda determinar automáticamente, pero sean necesarias para el tipo de anfitrión en el que se ejecutará Bash. Normalmente configure puede determinar este valor, pero si imprime un mensaje diciendo que no puede descubrir el tipo de anfitrión (host), tendrá que proporcionarle este dato mediante la opción '--host=TIPO'. 'TIPO' puede ser un nombre corto para el tipo de sistema, como 'sun4', o un nombre canónico con tres campos: 'CPU-COMPAÑÍA-SISTEMA' (p.e., 'i386-unknown-freebsd4.2').

Vea el fichero 'support/config.sub' para más información sobre los valores posibles de cada campo.

10.6.- Compartiendo Valores por DefectoSi desea establecer valores por defecto a los script configure para compartir, puede crear un guión de shell de emplazamiento llamado config.site que proporcione valores por defecto para las variables como CC, cache_file y prefix. configure busca el fichero 'PREFIX/share/config.site' si existe, o 'PREFIX/etc/config.site' si existe, en ese orden. O, también puede establecer la variable de entorno CONFIG_SITE para indicar la localización de este guión de comandos. Una advertencia: El configure de Bash busca un guión de emplazamiento, pero no todos los guiones configure lo hacen.

10.7.- Controles de Operaciónconfigure reconoce las siguientes opciones para controlar su funcionamiento.

--cache-file=fichero

Utiliza y guarda los resultados del las comprobaciones en fichero en vez de en './config.cache'. Establezca un valor de fichero igual a '/dev/null' para desactivar el uso de la antememoria (caché). Útil para depurar configure.

--help Imprime un resumen de las opciones de configure y finaliza.

--quiet--silent

-q No imprime mensajes sobre los chequeos que se están realizando.

--srcdir=dir

Busca el código fuente de Bash en el directorio dir. Normalmente configure puede determinar este directorio automáticamente.

--version Imprime la versión de Autoconf usada para generar el script configure y finaliza.

configure también acepta algunas opciones más, no muy utilizadas. 'configure –help' imprime la lista completa.

10.8.- Características OpcionalesEl script configure de Bash tiene varias opciones '--enable-catacterística' (activa-característica), donde catacterística indica una parte opcional de Bash. Hay también varias opciones '--with-paquete' (con el paquete), donde paquete es algo como 'bash-malloc' o 'purify'. Para desactivar el uso por defecto de un paquete utiliza '--without-paquete'. Para configurar Bash sin una característica que está activada por defecto utilice '--disable-característica'.

Página 144

Page 145: manual de Bash 4.1

Capítulo 10: Instalando Bash

A continuación mostramos una lista completa de las opciones '--enable-' y '--with-' reconocidas por el configure de Bash:

--with-afs

Define si estamos usando el Sistema de Ficheros de Andrew (Andrew File System) de Transac.

--with-bash-malloc

Utiliza la versión de Bash de malloc en el directorio 'lib/malloc'. Este no es el mismo malloc que aparece en la libc de GNU, es una versión más antigua derivada originalmente del malloc de BSD 4.2. Este malloc es muy rápido, pero gasta algún espacio en cada asignación. Esta opción está activada por defecto. El fichero 'NOTES' contiene una lista de sistemas para los que se debería desactivar, y configure desactiva esta opción automáticamente para varios sistemas.

--with-curses

Utiliza la librería curses en vez de la librería termcap. Debería suministrarse esta opción si su sistema tiene una base de datos termcap inadecuada o incompleta.

--with-gnu-malloc

Un sinónimo para –-with-bash-malloc.

--with-installed-readline[=PREFIJO]

Definir esto hace que Bash enlace con una versión de Readline instalada localmente en vez de con la versión en 'lib/readline'. Esta opción sólo trabaja con las versiones 5.0 o posteriores de Readline. Si PREFIJO es yes o no se proporciona, configure utiliza los valores de las variables de make includedir y libdir, que son los subdirectorios por defecto de prefijo, para encontrar la versión instalada de Readline si esta no está en el sistema estándar de directorios include y library. Si PREFIJO es no, Bash enlaza con la versión en 'lib/readline'. Si se asigna cualquier otro valor a PREFIJO, configure considera este valor como una ruta de directorios y buscará la versión instalada de Readline en subdirectorios de dicho directorio (los ficheros include en PREFIJO/include y los library en PREFIJO/lib).

--with-purifyDefine esto para usar el comprobador de asignación de memoria de Púrify proporcionado por Rational Software.

--enable-minimal-configEsto produce una shell con capacidades mínimas, cercana a la shell Bourne.

Hay varias opciones '--enable' que modifican la forma en la que se compila y enlaza Bash, en vez de cambiar características de tiempo de ejecución.

--enable-largefile

Activa el soporte para ficheros grandes si el sistema operativo requiere opciones especiales de compilación para construir programas que puedan acceder a ficheros de gran tamaño. Está activado por defecto si el sistema operativo proporciona soporte para ficheros grandes.

Página 145

Page 146: manual de Bash 4.1

Capítulo 10: Instalando Bash

--enable-profilingConstruye un binario de Bash que produce información autobiográfica para ser procesada por gprof cada vez que se ejecuta.

--enable-static-link

Esto produce que Bash se enlace estáticamente, si se está utilizando gcc. Esto se puede utilizar para construir una versión para usar como shell del administrador.

Se puede utilizar la opción 'minimal-config' para desactivar todas las opciones siguientes, pero si se procesa primero, se pueden activar las opciones individuales usando 'enable-feature'.

Todas las opciones siguientes excepto 'disabled-builtins' y 'xpg-echo-default' están activadas por defecto, a menos que el sistema operativo no las soporte.

--enable-alias

Permite la expansión de alias e incluye los comandos internos alias y unalias (vea la Sección 6.6 [Alias]).

--enable-arith-for-command

Incluye soporte para la forma alternativa del comando for que se comporta como la sentencia for del lenguaje C (vea la Sección 3.2.4.1 [Construcciones de Bucle]).

--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]).

Página 146

Page 147: manual de Bash 4.1

Capítulo 10: Instalando Bash

--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]).

--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

Página 147

Page 148: manual de Bash 4.1

Capítulo 10: Instalando Bash

[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 necesitar desactivar esto si su compilador no maneja cadenas de literales muy largas.

--enable-strict-posix-default

Hace que Bash se comporte por defecto conforme al estándar POSIX (vea la Sección 6.11 [El modo POSIX de Bash]).

--enable-usg-echo-default

Un sinónimo para –-enable-xpg-echo-default.

--enable-xpg-echo-default

Hace que el comando interno echo expanda por defecto los caracteres escapados con una barra invertida sin necesidad de la opción '-e'. Esto establece el valor por defecto de la opción de shell xpg_echo a on, lo que hace que el echo de Bash se comporte de forma más parecida a la versión especificada por la Especificación Única de Unix versión 3. Vea la Sección 4.2 [Comandos Internos de Bash], para una descripción de las secuencias de escape reconocidas por el comando interno echo.

El fichero 'config-top.h' contiene sentencias #define del Preprocesador de C para las opciones que no son modificables mediante configure. Algunas de estas sentencias no deben ser modificadas; tenga cuidado de las consecuencias de hacerlo. Lea los comentarios asociados con cada definición para obtener más información sobre sus efectos.

Página 148

Page 149: manual de Bash 4.1

Apéndice A: Informando de errores

Apéndice A: Informando de erroresPor favor informe sobre todos los errores que encuentre en Bash. Pero primero debería asegurarse de que realmente es un error, y que este aparece en la última versión de Bash. La última versión de Bash está siempre disponible por FTP desde ftp://ftp.gnu.org/pub/gnu/bash/.

Una vez que haya determinado que realmente existe un error, utilice el comando bashbug para enviar un informe de error. Si tiene una solución, le invitamos a que nos la comunique. Las sugerencias e informes de errores 'de filosofía' se pueden enviar a [email protected] o al grupo de Usenet gnu.bash.bug.

Todos los informes de errores deben incluir:.• El número de versión de Bash• El hardware y el sistema operativo.• El compilador usado para compilar Bash.• Una descripción del comportamiento del error.• Una receta o un breve guión de comandos que manifieste el error y sea útil para

reproducirlo.bashbug inserta los tres primeros puntos automáticamente en la plantilla que proporciona para

rellenar el informe de error.Por favor, envía todos los informes concernientes a este manual a [email protected].(N. de T.: el correo anterior es para la versión en inglés de este manual, para enviar sugerencias

o correcciones a la traducción en español utilice: [email protected])

2 Para errores en la versión original en inglés.

Página 149

Page 150: manual de Bash 4.1

Apéndice B: Diferencias Principales con la Shell de Bourne

C.2.- Diferencias Principales con la Shell de BourneBash implementa esencialmente la gramática, la expansión de parámetros y variables, la

redirección y el entrecomillado de la misma forma que lo hace la Shell Bourne. Bash utiliza el estándar POSIX como especificación para implementar estas características. Hay algunas diferencias entre la shell Bourne tradicional y Bash; esta sección detalla rápidamente las diferencias importante. Algunas de estas diferencias se explican en mayor detalle en secciones anteriores. Esta sección utiliza la versión de sh incluida en SVR4.2 (la última versión de la histórica shell de Bourne) como base de la comparación.

• Bash es conforme al estándar POSIX, incluso cuando la especificación POSIX difiere del comportamiento tradicional de sh (vea la Sección 6.11 [El Modo POSIX de Bash]).

• Bash tiene opciones de invocación multi-caracter (vea la Sección 6.1 [Invocando a Bash]).• Bash tiene edición de línea de comandos (vea el Capítulo 8 [Edición de la Línea de

Comandos]) y el comando interno bind.• Bash proporciona un mecanismo de completado programable de palabras (vea la Sección

8.6 [Completado Programable]), y los comandos internos complete, compgen, y compopt para su manipulación.

• Bash tiene historia de comandos (vea la Sección 9.1 [Características de Historia de Bash]) y los comandos internos history y fc para su manipulación. La lista de historia de Bash mantiene información de marca de tiempo y utiliza el valor de la variable HISTTIMEFORMAT para mostrarla.

• Bash implementa expansión de historia estilo csh (vea la Sección 9.3 [Interacción con la Historia]).

• Bash tiene variables de tipo array unidimensional (vea la Sección 6.7 [Arrays], junto con la expansión de variables y la sintaxis de asignación para usarlas. Varios de los comandos internos de Bash tienen opciones para actuar en arrays. Bash proporciona algunas variables internas de tipo array.

• Se soporta la sintaxis de entrecomillado $'...', que expande caracteres ANSI-C escapados con una barra invertida en textos encerrados entre comillas simples (vea la Sección 3.1.2.4 [Entrecomillado tipo ANSI-C]).

• Bash soporta la sintaxis de entrecomillado $”...” para hacer traducciones específicas de la localización a los caracteres encerrados entre comillas dobles. Las opciones de invocación '-D', '--dump-strings' y '--dump-po-strings' listan las cadenas traducibles que se encuentran en un guión de comandos (vea la Sección 3.1.2.5 [Traducciones Locales]

• Bash implementa la palabra clave ! Para negar el valor devuelto por una tubería (vea la Sección 3.2.2 [Tuberías]). Muy útil cuando una sentencia if necesita actuar sólo si una comprobación falla. La opción de Bash '-o pipefail' de set produce que una tubería devuelva un estado de error si cualquiera de sus comando falla.

• Bash tiene la palabra reservada time y cronometra comandos (vea la Sección 3.2.2 [Tuberías]). Se puede controlar la impresión de las estadísticas de tiempo con la variable TIMEFORMAT.

• Bash implementa el comando aritmético for (( expr1 ; expr2 ; expr3 )), similar al del lenguaje C (vea la Sección 3.2.4.1 [Construcciones Cíclicas]).

Página 150

Page 151: manual de Bash 4.1

Apéndice B: Diferencias Principales con la Shell de Bourne

• Bash incluye el comando compuesto select, que permite la generación de menús simples (vea la Sección 3.2.4.2 [Construcciones Condicionales]).

• Bash incluye el comando compuesto [[, que incluye las comprobaciones condicionales como parte de la gramática de la shell (vea la Sección 3.2.4.2 [Construcciones Condicionales]), incluyendo ajuste opcional de expresiones regulares.

• Bash proporciona ajuste insensible a mayúsculas y minúsculas de forma opcional para las construcciones case y [[.

• Bash incluye expansión de llaves (vea la Sección 3.5.1 [Expansión de Llaves]) y expansión de tildes (vea la Sección 3.5.2 [Expansión de Tildes]).

• Bash implementa los alias de comandos y los comandos internos alias y unalias (vea la Sección 6.6 [Alias]).

• Bash proporciona aritmética de shell, el comando compuesto (( (vea la Sección 3.2.4.2 [Construcciones Condicionales) y expansión aritmética (vea la Sección 6.5 [Aritmética de la Shell]).

• Las variables presentes en el entorno inicial de la shell se exportan automáticamente a los procesos hijo. La shell Bourne normalmente no hace esto a menos que las variables se marquen explícitamente usando el comando export.

• Bash soporta el operador de asignación '+=', que añade al valor actual de la variable nombrada en el lado izquierdo de la expresión.

• Bash incluye las expansiones de eliminación de patrones POSIX '%', '#' y '%%' para eliminar subcadenas al inicio o al final de los valores de las variables (vea la Sección 3.5.3 [Expansión de Parámetros de Shell]).

• Soporta la expansión ${#xx} que devuelve la longitud de ${xx}, si está soportada (vea la Sección 3.5.3 [Expansión de Parámetros de Shell]).

• Presenta la expansión ${var:desplazamiento[:longitud]}, que expande la subcadena contenida en var a una subcadena de longitud igual a longitud comenzando en desplazamiento (vea la Sección 3.5.3 [Expansión de Parámetros de Shell]).

• Soporta la expansión ${var/[/]patrón[/reemplazo]}, la cual busca el patrón en el valor de var y lo sustituye por reemplazo, si está disponible (vea la Sección 3.5.3 [Expansión de Parámetros de Shell]).

• Soporta la expansión ${!prefijo}* que expande a los nombres de todas las variables de shell cuyos nombres comienzan con prefijo (vea la Sección 3.5.3 [Expansión de Parámetros de Shell]).

• Bash presenta expansión indirecta de variables utilizando ${palabra} (vea la Sección 3.5.3 [Expansión de Parámetros de Shell]).

• Bash puede expandir los parámetros posicionales posteriores al $9 utilizando ${num}.• Implementa la sustitución de comandos de tipo POSIX $( ) (vea la Sección 3.5.4

[Sustitución de Comandos]), y la prefiere sobre la de la shell Bourne `` (la cual también está implementada por compatibilidad hacia atrás).

• Bash tiene sustitución de procesos (vea la Sección 3.5.6 [Sustitución de Procesos]).• Bash asigna automáticamente variables que proporcionan información sobre el usuario

actual (UID, EUID y GROUPS), el anfitrión actual (HOSTTYPE, OSTYPE, MACHTYPE y

Página 151

Page 152: manual de Bash 4.1

Apéndice B: Diferencias Principales con la Shell de Bourne

HOSTNAME), y la instancia de Bash que está en ejecución (BASH, BASH_VERSION y BASH_VERSINFO). Vea la Sección 5.2 [Variables de Bash], para obtener más detalles.

• Se utiliza la variable IFS para separar únicamente los resultados de la expansión, no todas las palabras (vea la Sección 3.5.7 [Separación de Palabras]). Esto da por solucionado un antiguo agujero de seguridad en la shell.

• Bash implementa el juego completo de operadores de expansión de nombres de fichero de POSIX, incluyendo clases de carácter, clases de equivalencia y símbolos de intercalado (vea la Sección 3.5.8 [Expansión de Nombres de Fichero]).

• Bash implementa las características de concordancia de patrones extendidos cuando la opción extglob está activada (vea la Sección 3.5.8.1 [Concordancia de Patrones]).

• Es posible tener una variable y una función con el mismo nombre; sh no separa los dos espacios de nombres.

• Las funciones de Bash pueden tener variables locales utilizando el comando interno local, y también se pueden escribir útiles funciones recursivas (vea la Sección 4.2 [Comandos Internos de Bash]).

• Las asignaciones de variables que preceden a los comandos afectan únicamente a ese comando, incluso en los comandos internos y en las funciones (vea la Sección 3.7.4 [Entorno]). En sh, todas las asignaciones de variables que preceden a los comandos son globales a menos que el comando se ejecute desde el sistema de ficheros.

• Bash realiza la expansión de nombres de fichero en los nombres de fichero especificados como operandos para los operadores de redirección de entrada y salida (vea la Sección 3.6 [Redirecciones]).

• Bash contiene el operador de redirección '<>', permitiendo que un fichero sea abierto tanto para lectura como para escritura, y el operador de redirección '&>', para dirigir la salida estándar y la salida de error estándar al mismo fichero (vea la Sección 3.6 [Redirecciones]).

• Bash incluye el operador de redirección '<<<', permitiendo utilizar una cadena como la entrada estándar para un comando.

• Bash implementa los operadores de redirección '[n]<&palabra' y '[n]>&palabra', que mueven un descriptor de fichero a otro.

• Bash trata varios nombres de fichero de forma especial cuando estos se utilizan en operadores de redirección (vea la Sección 3.6 [Redirecciones]).

• Bash puede abrir conexiones de red a máquinas y servicios arbitrarios con los operadores de redirección (vea la Sección 3.6 [Redirecciones]).

• Está disponible la opción noclobber para evitar sobreescribir ficheros existentes con la redirección de la salida (vea la Sección 4.3.1 [El Comando Interno Set]). El operador de redirección '>|' se puede utilizar para anular la opción noclobber.

• Los comandos internos de Bash cd y pwd (vea la Sección 4.1 [Comandos Internos de la Shell]) toman las opciones '-L' y '-P' para intercambiar entre los modos físico y lógico.

• Bash permite que una función sobreescirba un comando interno con el mismo nombre, y proporciona acceso a la funcionalidad de ese comando interno dentro de la función mediante los comandos internos builtin y command (vea la Sección 4.2 [Comandos Internos de Bash]).

Página 152

Page 153: manual de Bash 4.1

Apéndice B: Diferencias Principales con la Shell de Bourne

• El comando interno command permite deshabilitar selectivamente funciones cuando se está realizando una búsqueda de comandos (vea la Sección 4.2 [Comandos Internos de Bash]).

• Los comandos internos individuales se pueden activar o desactivar utilizando el comando interno enable (vea la Sección [Comandos Internos de Bash]).

• El comando interno exec toma opciones adicionales que permiten a los usuarios controlar los contenidos del entorno pasado al comando ejecutado, y cual será el argumento 0 del comando (vea la Sección 4.1 [Comandos Internos de Bash]).

• Las funciones se pueden exportar a los hijos mediante el entorno utilizando 'export -f' (vea la Sección 3.3 [Funciones de la Shell]).

• Los comandos internos de Bash export, readonly y declare pueden tomar la opción '-f' para actuar en funciones de shell, la opción '-p' para mostrar variables con varios atributos 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 printf 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

Página 153

Page 154: manual de Bash 4.1

Apéndice B: Diferencias Principales con la Shell de Bourne

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 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.

Página 154

Page 155: manual de Bash 4.1

Apéndice B: Diferencias Principales con la Shell de Bourne

• 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].

B.1.- Diferencias de Implementación con la Shell SVR4.2Puesto que Bash es una implementación completamente nueva no sufre de muchas de las limitaciones de la shell SVR4.2. Por ejemplo:

• Bash no bifurca una subshell cuando redirecciona hacia o desde una estructura de control como en una sentencia if o while.

• Bash no permite comillas sin balancear. La shell SVR4.2 insertaría silenciosamente la comilla de cierre necesaria al llegar al EOF bajo ciertas circunstancias. Esto puede ser la causa de algunos errores difíciles de encontrar.

• La shell SVR4.2 utiliza un burdo esquema de gestión de memoria basado en atrapar SIGSEGV. Si la shell se inicia desde un proceso con la señal SIGSEGV bloqueada (p.e., utilizando la llamada a la función system() de la librería C), podría comportarse de forma incorrecta.

• En un cuestionable intento de seguridad, la shell SVR4.2, cuando es invocada sin la opción '-p', modificará sus UID y GID real y efectivo si hay menos de algún valor mágico de umbral, generalmente 100. Esto puede llevar a resultados inesperados.

• La shell SVR4.2 no permite a los usuarios atrapar las señales SIGSEGV, SIGALRM o SIGCHLD.

• La shell SVR4.2 no permite que las variables IFS, MAILCHECK, PATH, PS1 o PS2 sean eliminadas.

• La shell SVR4.2 trata '^' como el equivalente no documentado de '|'.• Bash permite múltiples argumentos de opción cuando se invoca (-x -v); la shel SVR4.2

permitía únicamente un argumento opción (-xv). De hecho, algunas versiones de la shell fallan estrepitosamente si el segundo argumento comienza con un '-'.

• La shell SVR4.2 finaliza un guión de comandos si cualquier comando interno falla; Bash finaliza un guión de comandos sólo si falla alguno de los comandos internos especiales de POSIX, y sólo para ciertos fallos, cómo se enumera en el estándar POSIX.

• La shell SVR4.2 se comporta de forma diferente cuando se invoca con jsh (esto activa el control de tareas).

Página 155

Page 156: manual de Bash 4.1

Apéndice C: Licencia de Documentación Libre de GNU (Versión Original)

Apéndice C: GNU Free Documentation LicenseVersion 1.3, 3 November 2008© 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Copyrighthttp://fsf.org/Everyone is permitted to copy and distribute verbatim copies of this license document, but

changing it is not allowed.

C.0.- PREAMBLEThe 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.

C.1.- APPLICABILITY AND DEFINITIONSThis License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

Página 156

Page 157: manual de Bash 4.1

Apéndice C: Licencia de Documentación Libre de GNU (Versión Original)

The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”.

Examples of suitable formats for Transparent copies include plain ascii without markup, Texinfo input format, LaTEX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text.

The “publisher” means any person or entity that distributes copies of the Document to the public.

A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition.

The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties:

any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

C.2.- VERBATIM COPYINGYou may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may

Página 157

Page 158: manual de Bash 4.1

Apéndice C: Licencia de Documentación Libre de GNU (Versión Original)

accept compensation in exchange for copies.If you distribute a large enough number of copies you must also follow the conditions in

section 3.You may also lend copies, under the same conditions stated above, and you may publicly

display copies.

C.3.- COPYING IN QUANTITYIf you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you 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.- MODIFICATIONSYou 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

Página 158

Page 159: manual de Bash 4.1

Apéndice C: Licencia de Documentación Libre de GNU (Versión Original)

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 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

Página 159

Page 160: manual de Bash 4.1

Apéndice C: Licencia de Documentación Libre de GNU (Versión Original)

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.

C.5.- COMBINING DOCUMENTSYou may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in 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.6.- COLLECTIONS OF DOCUMENTSYou may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

C.7.- AGGREGATION WITH INDEPENDENT WORKSA compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative

Página 160

Page 161: manual de Bash 4.1

Apéndice C: Licencia de Documentación Libre de GNU (Versión Original)

works of the Document.If the Cover Text requirement of section 3 is applicable to these copies of the Document, then

if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

C.8.- TRANSLATIONTranslation 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.- TERMINATIONYou 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 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.9.- FUTURE REVISIONS OF THIS LICENSEThe Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

See http://www.gnu.org/copyleft/.Each version of the License is given a distinguishing version number. If the Document

Página 161

Page 162: manual de Bash 4.1

Apéndice C: Licencia de Documentación Libre de GNU (Versión Original)

specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Document.

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.

C.11.- ADDENDUM: How to use this License for your documentsTo use this License in a document you have written, include a copy of the License in the document 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 162

Page 163: manual de Bash 4.1

Apéndice D: Licencia de Documentación Libre de GNU

Apéndice D: Licencia de Documentación Libre de GNU (Traducción)Versión 1.3, 3 Noviembre 2008This is an unofficial translation of the GNU Free Documentation License into Spanish. It was

not published by the Free Software Foundation, and does not legally state the distribution terms for documentation that uses the GNU FDL -- only the original English text of the GNU FDL does that. However, we hope that this translation will help Spanish speakers understand the GNU FDL better.

Ésta es una traducción no oficial de la GNU Free Document License a Español (Castellano). No ha sido publicada por la Free Software Foundation y no establece legalmente los términos de distribución para trabajos que usen la GFDL (sólo el texto de la versión original en Inglés de la GFDL lo hace). Sin embargo, esperamos que esta traducción ayude a los hispanohablantes a entender mejor la GFDL. La versión original de la GFDL esta disponible en la Free Software Foundation.Esta traducción está basada en una de la versión 1.2 por Joaquín Seoane.Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. <http://www.fsf.org>Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

Se permite la copia y distribución de copias literales de este documento de licencia, pero no se permiten cambios.[1]

D.0.- PREÁMBULOEl 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.

D.1.- APLICABILIDAD Y DEFINICIONESEsta Licencia se aplica a cualquier manual u otro trabajo, en cualquier soporte, que contenga

una nota del propietario de los derechos de autor que indique que puede ser distribuido bajo los términos de esta Licencia. Tal nota garantiza en cualquier lugar del mundo, sin pago de derechos y sin límite de tiempo, el uso de dicho trabajo según las condiciones aquí estipuladas. En adelante la palabra Documento se referirá a cualquiera de dichos manuales o trabajos. Cualquier persona es un licenciatario y será referido como Usted. Usted acepta la licencia si copia, modifica o distribuye el trabajo de cualquier modo que requiera permiso según la ley de propiedad intelectual.

Una Versión Modificada del Documento significa cualquier trabajo que contenga el

Página 163

Page 164: manual de Bash 4.1

Apéndice D: Licencia de Documentación Libre de GNU

Documento o una porción del mismo, ya sea una copia literal o con modificaciones y/o traducciones a otro idioma.

Una Sección Secundaria es un apéndice con título o una sección preliminar del Documento que trata exclusivamente de la relación entre los autores o editores y el tema general del Documento (o temas relacionados) pero que no contiene nada que entre directamente en dicho tema general (por ejemplo, si el Documento es en parte un texto de matemáticas, una Sección Secundaria puede no explicar nada de matemáticas). La relación puede ser una conexión histórica con el tema o temas relacionados, o una opinión legal, comercial, filosófica, ética o política acerca de ellos.

Las Secciones Invariantes son ciertas Secciones Secundarias cuyos títulos son designados como Secciones Invariantes en la nota que indica que el documento es liberado bajo esta Licencia. Si una sección no entra en la definición de Secundaria, no puede designarse como Invariante. El documento puede no tener Secciones Invariantes. Si el Documento no identifica las Secciones Invariantes, es que no las tiene.

Los Textos de Cubierta son ciertos pasajes cortos de texto que se listan como Textos de Cubierta Delantera o Textos de Cubierta Trasera en la nota que indica que el documento es liberado bajo esta Licencia. Un Texto de Cubierta Delantera puede tener como mucho 5 palabras, y uno de Cubierta Trasera puede tener hasta 25 palabras.

Una copia Transparente del Documento, significa una copia para lectura en máquina, representada en un formato cuya especificación está disponible al público en general, apto para que los contenidos puedan ser vistos y editados directamente con editores de texto genéricos o (para imágenes compuestas por puntos) con programas genéricos de manipulación de imágenes o (para dibujos) con algún editor de dibujos ampliamente disponible, y que sea adecuado como entrada para formateadores de texto o para su traducción automática a formatos adecuados para formateadores de texto. Una copia hecha en un formato definido como Transparente, pero cuyo marcaje o ausencia de él haya sido diseñado para impedir o dificultar modificaciones posteriores por parte de los lectores no es Transparente. Un formato de imagen no es Transparente si se usa para una cantidad de texto sustancial. Una copia que no es Transparente se denomina Opaca.

Como ejemplos de formatos adecuados para copias Transparentes están ASCII puro sin marcaje, formato de entrada de Texinfo, formato de entrada de LaTeX, SGML o XML usando una DTD disponible públicamente, y HTML, PostScript o PDF simples, que sigan los estándares y diseñados para que los modifiquen personas. Ejemplos de formatos de imagen transparentes son PNG, XCF y JPG. Los formatos Opacos incluyen formatos propietarios que pueden ser leídos y editados únicamente en procesadores de palabras propietarios, SGML o XML para los cuáles las DTD y/o herramientas de procesamiento no estén ampliamente disponibles, y HTML, PostScript o PDF generados por algunos procesadores de palabras sólo como salida.

La Portada significa, en un libro impreso, la página de título, más las páginas siguientes que sean necesarias para mantener, de manera legible, el material que esta Licencia requiere en la portada. Para trabajos en formatos que no tienen página de portada como tal, Portada significa el texto cercano a la aparición más prominente del título del trabajo, precediendo el comienzo del cuerpo del texto.

El "Editor" se refiere a cualquier persona o entidad que distribuya copias del Documento a el público.

Una sección Titulada XYZ significa una parte del Documento cuyo título es precisamente

Página 164

Page 165: manual de Bash 4.1

Apéndice D: Licencia de Documentación Libre de GNU

XYZ o contiene XYZ entre paréntesis, a continuación de texto que traduce XYZ a otro idioma (aquí XYZ se refiere a nombres de sección específicos mencionados más abajo, como Agradecimientos, Dedicatorias , Aprobaciones o Historia). Conservar el Título de tal sección cuando se modifica el Documento significa que permanece una sección Titulada XYZ según esta definición.[3]

El Documento puede incluir Limitaciones de Garantía cercanas a la nota donde se declara que al Documento se le aplica esta Licencia. Se considera que estas Limitaciones de Garantía están incluidas, por referencia, en la Licencia, pero sólo en cuanto a limitaciones de garantía: cualquier otra implicación que estas Limitaciones de Garantía puedan tener es nula y no tiene efecto en el significado de esta Licencia.

D.2.- COPIA LITERALUsted puede copiar y distribuir el Documento en cualquier soporte, sea en forma comercial o

no, siempre y cuando esta Licencia, las notas de copyright y la nota que indica que esta Licencia se aplica al Documento se reproduzcan en todas las copias y que usted no añada ninguna otra condición a las expuestas en esta Licencia. Usted no puede usar medidas técnicas para obstruir o controlar la lectura o copia posterior de las copias que usted haga o distribuya. Sin embargo, usted puede aceptar compensación a cambio de las copias. Si distribuye un número suficientemente grande de copias también deberá seguir las condiciones de la sección 3.

Usted también puede prestar copias, bajo las mismas condiciones establecidas anteriormente, y puede exhibir copias públicamente.

D.3.- COPIADO EN CANTIDADSi publica copias impresas del Documento (o copias en soportes que tengan normalmente

cubiertas impresas) que sobrepasen las 100, y la nota de licencia del Documento exige Textos de Cubierta, debe incluir las copias con cubiertas que lleven en forma clara y legible todos esos Textos de Cubierta: Textos de Cubierta Delantera en la cubierta delantera y Textos de Cubierta Trasera en la cubierta trasera. Ambas cubiertas deben identificarlo a Usted clara y legiblemente como editor de tales copias. La cubierta debe mostrar el título completo con todas las palabras igualmente prominentes y visibles. Además puede añadir otro material en las cubiertas. Las copias con cambios limitados a las cubiertas, siempre que conserven el título del Documento y satisfagan estas condiciones, pueden considerarse como copias literales.

Si los textos requeridos para la cubierta son muy voluminosos para que ajusten legiblemente, debe colocar los primeros (tantos como sea razonable colocar) en la verdadera cubierta y situar el resto en páginas adyacentes.

Si Usted publica o distribuye copias Opacas del Documento cuya cantidad exceda las 100, debe incluir una copia Transparente, que pueda ser leída por una máquina, con cada copia Opaca, o bien mostrar, en cada copia Opaca, una dirección de red donde cualquier usuario de la misma tenga acceso por medio de protocolos públicos y estandarizados a una copia Transparente del Documento completa, sin material adicional. Si usted hace uso de la última opción, deberá tomar las medidas necesarias, cuando comience la distribución de las copias Opacas en cantidad, para asegurar que esta copia Transparente permanecerá accesible en el sitio establecido por lo menos un año después de la última vez que distribuya una copia Opaca de esa edición al público (directamente o a través de sus agentes o distribuidores).

Página 165

Page 166: manual de Bash 4.1

Apéndice D: Licencia de Documentación Libre de GNU

Se solicita, aunque no es requisito, que se ponga en contacto con los autores del Documento antes de redistribuir gran número de copias, para darles la oportunidad de que le proporcionen una versión actualizada del Documento.

D.4.- MODIFICACIONESPuede 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. • B. Listar en la Portada, como autores, una o más personas o entidades responsables de

la autoría de las modificaciones de la Versión Modificada, junto con por lo menos cinco de los autores principales del Documento (todos sus autores principales, si hay menos de cinco), a menos que le eximan de tal requisito. • C. Mostrar en la Portada como editor el nombre del editor de la Versión Modificada. • D. Conservar todas las notas de copyright del Documento. • E. Añadir una nota de copyright apropiada a sus modificaciones, adyacente a las otras

notas de copyright. • F. Incluir, inmediatamente después de las notas de copyright, una nota de licencia

dando el permiso para usar la Versión Modificada bajo los términos de esta Licencia, como se muestra en el Apéndice [Apéndice] al final de este documento. • G. Conservar en esa nota de licencia el listado completo de las Secciones Invariantes y

de los Textos de Cubierta que sean requeridos en la nota de Licencia del Documento original. • H. Incluir una copia sin modificación de esta Licencia. • I. Conservar la sección Titulada Historia, conservar su Título y añadirle un elemento

que declare al menos el título, el año, los nuevos autores y el editor de la Versión Modificada, tal como figuran en la Portada. Si no hay una sección Titulada Historia en el Documento, crear una estableciendo el título, el año, los autores y el editor del Documento, tal como figuran en su Portada, añadiendo además un elemento describiendo la Versión Modificada, como se estableció en la oración anterior. • J. Conservar la dirección en red, si la hay, dada en el Documento para el acceso público

a una copia Transparente del mismo, así como las otras direcciones de red dadas en el Documento para versiones anteriores en las que estuviese basado. Pueden ubicarse en la sección Historia. Se puede omitir la ubicación en red de un trabajo que haya sido publicado por lo menos cuatro años antes que el Documento mismo, o si el editor original de dicha versión da permiso. • K. En cualquier sección Titulada Agradecimientos o Dedicatorias, conservar el Título

de la sección y conservar en ella toda la sustancia y el tono de los agradecimientos y/o

Página 166

Page 167: manual de Bash 4.1

Apéndice D: Licencia de Documentación Libre de GNU

dedicatorias incluidas por cada contribuyente. • L. Conservar todas las Secciones Invariantes del Documento, sin alterar su texto ni sus

títulos. Números de sección o el equivalente no son considerados parte de los títulos de la sección. • M. Borrar cualquier sección titulada Aprobaciones. Tales secciones no pueden estar

incluidas en las Versiones Modificadas. • N. No cambiar el título de ninguna sección existente a Aprobaciones ni a uno que entre

en conflicto con el de alguna Sección Invariante. • O. Conservar todas las Limitaciones de Garantía.

Si la Versión Modificada incluye secciones o apéndices nuevos que califiquen como Secciones Secundarias y contienen material no copiado del Documento, puede opcionalmente designar algunas o todas esas secciones como invariantes. Para hacerlo, añada sus títulos a la lista de Secciones Invariantes en la nota de licencia de la Versión Modificada. Tales títulos deben ser distintos de cualquier otro título de sección.

Puede añadir una sección titulada Aprobaciones, siempre que contenga únicamente aprobaciones de su Versión Modificada por otras fuentes --por ejemplo, observaciones de peritos o que el texto ha sido aprobado por una organización como la definición oficial de un estándar.

Puede añadir un pasaje de hasta cinco palabras como Texto de Cubierta Delantera y un pasaje de 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.

D.5.- COMBINACIÓN DE DOCUMENTOSUsted puede combinar el Documento con otros documentos liberados bajo esta Licencia, bajo

los términos definidos en la sección 4 anterior para versiones modificadas, siempre que incluya en la combinación todas las Secciones Invariantes de todos los documentos originales, sin modificar, listadas todas como Secciones Invariantes del trabajo combinado en su nota de licencia. Así mismo debe incluir la Limitación de Garantía.

El trabajo combinado necesita contener solamente una copia de esta Licencia, y puede reemplazar varias Secciones Invariantes idénticas por una sola copia. Si hay varias Secciones Invariantes con el mismo nombre pero con contenidos diferentes, haga el título de cada una de estas secciones único añadiéndole al final del mismo, entre paréntesis, el nombre del autor o editor original de esa sección, si es conocido, o si no, un número único. Haga el mismo ajuste a los títulos de sección en la lista de Secciones Invariantes de la nota de licencia del trabajo combinado.

En la combinación, debe combinar cualquier sección Titulada Historia de los documentos originales, formando una sección Titulada Historia; de la misma forma combine cualquier sección Titulada Agradecimientos, y cualquier sección Titulada Dedicatorias. Debe borrar todas las secciones tituladas Aprobaciones.

Página 167

Page 168: manual de Bash 4.1

Apéndice D: Licencia de Documentación Libre de GNU

D.6.- COLECCIONES DE DOCUMENTOSPuede hacer una colección que conste del Documento y de otros documentos liberados bajo

esta Licencia, y reemplazar las copias individuales de esta Licencia en todos los documentos por una sola copia que esté incluida en la colección, siempre que siga las reglas de esta Licencia para cada copia literal de cada uno de los documentos en cualquiera de los demás aspectos.

Puede extraer un solo documento de una de tales colecciones y distribuirlo individualmente bajo esta Licencia, siempre que inserte una copia de esta Licencia en el documento extraído, y siga esta Licencia en todos los demás aspectos relativos a la copia literal de dicho documento.

D.7.- AGREGACIÓN CON TRABAJOS INDEPENDIENTESUna recopilación que conste del Documento o sus derivados y de otros documentos o trabajos

separados e independientes, en cualquier soporte de almacenamiento o distribución, se denomina un agregado si el copyright resultante de la compilación no se usa para limitar los derechos de los usuarios de la misma más allá de lo que los de los trabajos individuales permiten. Cuando el Documento se incluye en un agregado, esta Licencia no se aplica a otros trabajos del agregado que no sean en sí mismos derivados del Documento.

Si el requisito de la sección 3 sobre el Texto de Cubierta es aplicable a estas copias del Documento y el Documento es menor que la mitad del agregado entero, los Textos de Cubierta del Documento pueden colocarse en cubiertas que enmarquen solamente el Documento dentro del agregado, o el equivalente electrónico de las cubiertas si el documento está en forma electrónica. En caso contrario deben aparecer en cubiertas impresas enmarcando todo el agregado.

D.8.- TRADUCCIÓNLa 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ÓNUsted 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

Página 168

Page 169: manual de Bash 4.1

Apéndice D: Licencia de Documentación Libre de GNU

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.

D.9.1.- REVISIONES FUTURAS DE ESTA LICENCIADe vez en cuando la Free Software Foundation puede publicar versiones nuevas y revisadas de

la Licencia de Documentación Libre GNU. Tales versiones nuevas serán similares en espíritu a la presente versión, pero pueden diferir en detalles para solucionar nuevos problemas o intereses. Vea http://www.gnu.org/copyleft/.

Cada versión de la Licencia tiene un número de versión que la distingue. Si el Documento especifica que se aplica una versión numerada en particular de esta licencia o cualquier versión posterior, usted tiene la opción de seguir los términos y condiciones de la versión especificada o cualquiera posterior que haya sido publicada (no como borrador) por la Free Software Foundation. Si el Documento no especifica un número de versión de esta Licencia, puede escoger cualquier versión que haya sido publicada (no como borrador) por la Free Software Foundation. Si el Documento especifica que un apoderado puede decidir qué versión futura de esta Licencia puede ser utilizada, esa frase de aceptación del apoderado de una versión le autoriza permanentemente a escoger esa versión para el Documento.

D.10.- RE-LICENCIAMIENTOUn "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

Página 169

Page 170: manual de Bash 4.1

Apéndice D: Licencia de Documentación Libre de GNU

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.11.- ADDENDUM: Cómo usar esta Licencia en sus documentosPara usar esta licencia en un documento que usted haya escrito, incluya una copia de la

Licencia en el documento y ponga el siguiente copyright y nota de licencia justo después de la página de título:

Copyright (c) AÑO SU NOMBRE. Se concede permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre de GNU, Versión 1.3 o cualquier otra versión posterior publicada por la Free Software Foundation; sin Secciones Invariantes ni Textos de Cubierta Delantera ni Textos de Cubierta Trasera. Una copia de la licencia está incluida en la sección titulada GNU Free Documentation License.

Si tiene Secciones Invariantes, Textos de Cubierta Delantera y Textos de Cubierta Trasera, reemplace la frase sin ... Trasera por esto:

siendo las Secciones Invariantes LISTE SUS TÍTULOS, siendo los Textos de Cubierta Delantera LISTAR, y siendo sus Textos de Cubierta Trasera LISTAR.

Si tiene Secciones Invariantes sin Textos de Cubierta o cualquier otra combinación de los tres, mezcle ambas alternativas para adaptarse a la situación.

Si su documento contiene ejemplos de código de programa no triviales, recomendamos liberar estos ejemplos en paralelo bajo la licencia de software libre que usted elija, como la Licencia Pública General de GNU (GNU General Public License), para permitir su uso en software libre.

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.

D.13.- Referencias:1.http://www.gnu.org/copyleft/fdl.html2.http://www.gnu.org/licenses/fdl-1.3-pdiff.ps (formato PostScript)

3.http://curso-sobre.berlios.de/gfdles/gfdles.html4. http://creativecommons.org/licenses/by-sa/3.0/es/

Página 170

Page 171: manual de Bash 4.1

Apéndice E: Índices

Apéndice E: Índices

E.1.- Índice de Comandos Internos de la Shell

:: .......................................................................... 44

.

. .......................................................................... 44

[[ .......................................................................... 48

Aalias ................................................................... 51

Bbg ..................................................................... 103bind .................................................................... 51break .................................................................. 45builtin ........................................................... 11, 52

Ccaller .................................................................. 53cd ....................................................................... 45command ........................................................... 53compgen .......................................................... 131complete .......................................................... 132compopt ........................................................... 135continue ............................................................. 43

Ddeclare ............................................................... 53dirs ..................................................................... 95disown ............................................................. 104

Eecho ................................................................... 55enable ................................................................ 55eval .................................................................... 45exec ................................................................... 45exit ..................................................................... 45export ................................................................. 46

Ffc ...................................................................... 137fg ...................................................................... 103

Ggetopts ............................................................... 46

Hhash ................................................................... 47help .................................................................... 56history .............................................................. 137

Jjobs .................................................................. 103

Kkill .................................................................... 104

Llet ....................................................................... 56local ................................................................... 56logout ................................................................. 56

Mmapfile ............................................................... 56

Ppopd ................................................................... 96printf ................................................................... 57pushd ................................................................. 96pwd .................................................................... 47

Rread ................................................................... 58readarray ........................................................... 59readonly ............................................................. 47return ................................................................. 48

Sset ...................................................................... 61shift .................................................................... 48shopt .................................................................. 65source ................................................................ 59suspend ........................................................... 105

Ttest ..................................................................... 48times .................................................................. 49trap .................................................................... 49type .................................................................... 59typeset ............................................................... 60

Página 171

Page 172: manual de Bash 4.1

Apéndice E: Índices

Uulimit .................................................................. 60umask ................................................................ 50unalias ............................................................... 61

unset .................................................................. 51

Wwait .................................................................. 104

E.2.- Índice de Palabras Reservadas de la Shell

!! .................................................................... 26, 35

[[[ ......................................................................... 20

]]] ......................................................................... 20

{{ ......................................................................... 22

}} ......................................................................... 22

Ccase ................................................................... 19

Ddo ....................................................................... 18done ................................................................... 18

Eelif ...................................................................... 19else .................................................................... 19

esac ................................................................... 19

Ffi ......................................................................... 19for ...................................................................... 18function .............................................................. 23

Iif ......................................................................... 18in ........................................................................ 19

Sselect ................................................................. 20

Tthen .................................................................... 19time .................................................................... 16

Uuntil .................................................................... 18

Vvisible-stats ...................................................... 115

Wwhile .................................................................. 18

E.3.- Índice de Parámetros y Variables

__ ......................................................................... 26

­- ......................................................................... 25

!! .......................................................................... 26

?? ......................................................................... 25

@@ ....................................................................... 25

** ......................................................................... 25

## ......................................................................... 25

$$ ......................................................................... 26

00 ......................................................................... 26

Aauto_resume .................................................... 106

Página 172

Page 173: manual de Bash 4.1

Apéndice E: Índices

BBASH ................................................................. 74BASH_ALIASES ................................................ 74BASH_ARGC ..................................................... 74BASH_ARGV ..................................................... 74BASH_CMDS .................................................... 75BASH_COMMAND ............................................ 75BASH_ENV ........................................................ 75BASH_EXECUTION_STRING ........................... 75BASH_LINENO .................................................. 75BASH_REMATCH ............................................. 75BASH_SOURCE ................................................ 75BASH_SUBSHELL ............................................ 75BASH_VERSINFO ............................................. 75BASH_VERSION ............................................... 76BASH_XTRACEFD ............................................ 76BASHOPTS ....................................................... 74BASHPID ........................................................... 74bell-style .......................................................... 111bind-tty-special-chars ....................................... 111

CCDPATH ............................................................ 73COLUMNS ......................................................... 76comment-begin ................................................ 111COMP_CWORD ................................................ 76COMP_KEY ....................................................... 77COMP_LINE ...................................................... 76COMP_POINT ................................................... 76COMP_TYPE ..................................................... 77COMP_WORDBREAKS .................................... 77COMP_WORDS ................................................ 77completion-prefix-display-length ...................... 112completion-query-items ................................... 112COMPREPLY .................................................... 77convert-meta .................................................... 112

DDIRSTACK ........................................................ 77disable-completion ........................................... 112

Eediting-mode .................................................... 112EMACS .............................................................. 77enable-keypad ................................................. 112EUID .................................................................. 78expand-tilde ..................................................... 113

FFCEDIT .............................................................. 78FIGNORE .......................................................... 78FUNCNAME ...................................................... 78

GGLOBIGNORE ................................................... 78GROUPS ........................................................... 78

Hhistchars ............................................................ 78HISTCMD .......................................................... 78HISTCONTROL ................................................. 79HISTFILE ........................................................... 79HISTFILESIZE ................................................... 79HISTIGNORE .................................................... 79history-preserve-point ...................................... 113history-size ...................................................... 113HISTSIZE .......................................................... 80HISTTIMEFORMAT ........................................... 80HOME ................................................................ 72horizontal-scroll-mode ..................................... 113HOSTFILE ......................................................... 80HOSTNAME ...................................................... 80HOSTTYPE ....................................................... 80

IIFS ..................................................................... 73IGNOREEOF ..................................................... 80input-meta ........................................................ 113INPUTRC ........................................................... 80isearch-terminators .......................................... 113

Kkeymap ............................................................ 113

LLANG ................................................................. 80LC_ALL .............................................................. 80LC_COLLATE .................................................... 81LC_MESSAGES .......................................... 15, 81LC_NUMERIC ................................................... 81LC_CTYPE ........................................................ 81LINENO ............................................................. 81LINES ................................................................ 81

MMACHTYPE ....................................................... 81MAIL .................................................................. 73

Página 173

Page 174: manual de Bash 4.1

Apéndice E: Índices

MAILCHECK ...................................................... 81MAILPATH ......................................................... 73mark-modified-lines ......................................... 114mark-symlinked-directories .............................. 114match-hidden-files ........................................... 114meta-flag .......................................................... 113

OOLDPWD ........................................................... 81OPTARG ........................................................... 73OPTERR ............................................................ 81OPTIND ............................................................. 73OSTYPE ............................................................ 81output-meta ..................................................... 114

Ppage-completions ............................................ 114PATH ................................................................. 73PIPESTATUS .................................................... 82POSIXLY_CORRECT ........................................ 82PPID .................................................................. 82PROMPT_COMMAND ...................................... 82PROMPT_DIRTRIM .......................................... 82PS1 .................................................................... 73PS2 .................................................................... 74PS3 .................................................................... 82PS4 .................................................................... 82

PWD .................................................................. 82

RRANDOM ........................................................... 82REPLY ............................................................... 82revert-all-at-newline ......................................... 114

SSECONDS ......................................................... 82SHELL ............................................................... 83SHELLOPTS ...................................................... 83SHLVL ............................................................... 83show-all-if-ambiguous ...................................... 114show-all-if-unmodified ...................................... 114skip-completed-text .......................................... 115

TTEXTDOMAIN ................................................... 15TEXTDOMAINDIR ............................................. 15TIMEFORMAT ................................................... 83TMOUT .............................................................. 83TMPDIR ............................................................. 84

UUID .................................................................... 84

Vvisible-stats ...................................................... 115

E.4.- Índice de Funciones

Aabort (C-g) ....................................................... 127accept-line (Nueva_línea o Return) ................. 121alias-expand-line () .......................................... 129

Bbackward-delete-char (Rubout) ....................... 122backward-kill-line (C-x Rubout) ........................ 123backward-kill-word () ........................................ 124backward-kill-word (M-DEL) ............................. 124backward-word (M-b) ....................................... 121beginning-of-history (M-<) ................................ 121beginning-of-line (C-a) ..................................... 120

Ccall-last-kbd-macro (C-x e) .............................. 127capitalize-word (M-c) ....................................... 123character-search (C-]) ...................................... 128

character-search-backward (M-C-]) ................. 128clear-screen (C-l) ............................................. 121complete (TAB) ................................................ 125complete-command (M-!) ................................. 126complete-filename (M-/) ................................... 126complete-hostname (M-@) .............................. 126complete-into-braces (M-{) .............................. 127complete-username (M-~) ............................... 126complete-variable (M-$) ................................... 126copy-backward-word () .................................... 124copy-forward-word () ........................................ 124copy-region-as-kill () ........................................ 124

Ddabbrev-expand () ........................................... 127delete-char (C-d) .............................................. 122delete-char-or-list() .......................................... 126delete-horizontal-space () ................................ 124

Página 174

Page 175: manual de Bash 4.1

Apéndice E: Índices

digit-argument (M-0, M-1, …, M--) ................... 125display-shell-version (C-x C-v) ......................... 129do-uppercase-version (M-a, M-b, M-x, …) ....... 127downcase-word (M-l) ....................................... 123dump-functions () ............................................. 128dump-macros () ............................................... 129dump-variables () ............................................. 129dynamic-complete-history (M-TAB) ................. 127

Eedit-and-execute-command (C-xC-e) .............. 130end-kbd-macro (C-x )) ..................................... 127end-of-history (M->) ......................................... 121end-of-line (C-e) ............................................... 120exchange-point-and-mark (C-x C-x) ................ 128

Fforward-backward-delete-char () ...................... 122forward-char (C-f) ............................................ 120forward-search-history (C-s) ............................ 121forward-word (M-f) ........................................... 120

Gglob-complete-word (M-g) ................................ 129glob-expand-word (C-x *) ................................. 129glob-list-expansions (C-x g) ............................. 129

Hhistoriy-and-alias-expand-line () ....................... 130history-expand-line (M-^) ................................. 129history-search-forward () .................................. 122

Iinsert-comment (M-#) ...................................... 128insert-completions (M-*) ................................... 125insert-last-argument (M-. o M-_) ...................... 130

Jjobs .................................................................. 104

Kkill-line (C-k) ..................................................... 123kill-region () ...................................................... 124kill-whole-line () ................................................ 123kill-word (M-d) .................................................. 124

Mmagic-space () ................................................. 129menu-complete () ............................................. 125menu-complete-backward () ............................ 126

Nnext-history (C-n) ............................................. 121non-incremental-forward-search-history (M-n) . 122non-incremental-reverse-search-history (M-p) . 121

Ooperate-and-get-netx (C-o) .............................. 130overwrite-mode () ............................................. 123

Ppossible-command-completions (C-x !) ........... 127possible-completions (M-?) .............................. 125possible-filename-completions (C-x /) .............. 126possible-hostname-completions (C-x @) ......... 126possible-username-completions (C-x ~) .......... 126possible-variable-completions (C-x $) .............. 126prefix-meta (ESC) ............................................ 127previous-history (C-p) ...................................... 121

Qquoted-insert (C-q o C-v) ................................. 122

Rre-read-init-file (C-x C-r) ................................... 127redraw-current-line () ....................................... 121reverse-search-history (C-r) ............................. 121revert-line (M-r) ................................................ 128

Sself-insert (a, b, A, 1, !, …) ............................... 122set-mark (C-@) ................................................ 128shell-backward-word () .................................... 121shell-expand-line (M-C-e) ................................ 129shell-forward-word () ........................................ 121shell-kill-word () ................................................ 124skip-csi-sequence () ......................................... 128start-kbd-macro (C-x () .................................... 127

Ttilde-expand (M-&) ........................................... 128transpose-chars (C-t) ....................................... 123transpose-words (M-t) ...................................... 123

Uundo (C-_ o C-x C-u) ....................................... 128universal-argument () ....................................... 125unix-filename-rubout () ..................................... 124unix-line-discard (C-u) ..................................... 123unix-word-rubout () .......................................... 124

Página 175

Page 176: manual de Bash 4.1

Apéndice E: Índices

upcase-word (M-u) ........................................... 123

Yyank (C-y) ........................................................ 125

yank-last-arg (M-. o M-_) ................................. 122yank-nth-arg (M-C-y) ....................................... 122yank-pop (M-y) ................................................. 125

Página 176