Вы находитесь на странице: 1из 178

Traduccin del Manual de Referencia para Bash (version 4.

1)
Edicion 0.9.1 Diciembre de 2010

Chet Ramey, Case Western Reserve University Brian Fox, Free Software Foundation Mario Piar Ramrez (Traduccin)

Esta es una traduccin no autorizada de la Documentacin de Referencia de Bash. Est basada en la Edicin 4.1, para Bash versin 4.1, de Diciembre de 2009. La ltima versin original (en ingls) 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 19882009 Free Software Foundation, Inc. Se autoriza a copiar, distribuir y/o modificar este documento bajo los trminos de la GNU Free Documentation License, Versin 1.3 o cualquier versin 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 seccin titulada GNU Free Documentation License en el Apndice C, seguida por una traduccin de la misma (Apndice D) obtenida de: http://docs.danexlandia.com.mx/gfdl/gfdl_es.f.html

Puede comunicar sugerencias o errores en la direccin traduccionbash41@gmail.com

Pgina ii

Datos de la Edicin original:


Bash Reference Manual Reference Documentation for Bash Edition 4.1, for Bash Version 4.1. December 2009 Chet Ramey, Case Western Reserve University Brian Fox, Free Software Foundation

Bash - Manual de Referencia Documentacin de Referencia para Bash Edicin 4.1, para Bash versin 4.1 Diciembre de 2009

Chet Ramey, Case Western Reserve University Brian Fox, Free Software Foundation

Pgina iii

Presentacion de la version original


This text is a brief description of the features that are present in the Bash shell (version 4.1, 23 December 2009). This is Edition 4.1, last updated 23 December 2009, of The GNU Bash Reference Manual, for Bash, Version 4.1. Copyright 19882009 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 FSFs Back-Cover Text is: You are free to copy and modify this GNU manual. Buying copies from GNU Press supports the FSF in developing GNU and promoting software freedom. Published by the Free Software Foundation 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

Presentacion de la version original (traducida)


Este texto es una breve descripcin de las caractersticas que estn presentes en la shell Bash (versin 4.1 de 23 de diciembre de 2009) Esta es la edicin 4.1, actualizada por ltima vez el 23 de diciembre de 2009, del Manual de Referencia de GNU Bash para Bash Versin 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 autorizacin en todas las copias. Se autoriza a copiar, distribuir y/o modificar este documento bajo los trminos de la GNU Free Documentation License, Versin 1.3 o cualquier versin posterior publicada por la Free Software Foundation; sin Secciones Invariantes, con la portada A GNU Manual, y con los textos de contraportada como en el apartado (a) mostrado ms abajo. Se incluye una copia de la licencia en la seccin 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 Foundation 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA

Pgina iv

ndice de Contenido

ndice de contenido
1.-Introduccin.....................................................................................................................................9 1.1.-Qu es Bash?...........................................................................................................................9 1.2.-Qu es una shell?....................................................................................................................9 2.-Definiciones...................................................................................................................................11 3.-Caractersticas Bsicas de la Shell.................................................................................................13 3.1.-Sintaxis de la shell..................................................................................................................13 3.1.1.-Modo de operacin de la shell........................................................................................13 3.1.2.-Entrecomillado................................................................................................................14 3.1.2.1.-Carcter de Escape..................................................................................................14 3.1.2.2.-Comillas simples.....................................................................................................14 3.1.2.3.-Comillas Dobles......................................................................................................14 3.1.2.4.-Entrecomillado ANSI-C..........................................................................................14 3.1.2.5.-Traducciones Especficas de la Localizacin..........................................................15 3.1.3.-Comentarios....................................................................................................................15 3.2.-Comandos de Shell.................................................................................................................16 3.2.1.-Comandos simples..........................................................................................................16 3.2.2.-Tuberas..........................................................................................................................16 3.2.3.-Listas de Comandos........................................................................................................17 3.2.4.-Comandos Compuestos..................................................................................................17 3.2.4.1.-Construcciones Cclicas..........................................................................................18 3.2.4.2.-Construcciones Condicionales................................................................................18 3.2.4.3.-Agrupando Comandos.............................................................................................21 3.2.5.-Coprocesos......................................................................................................................22 3.3.-Funciones de Shell..................................................................................................................23 3.4.-Parmetros de Shell................................................................................................................24 3.4.1.-Parmetros posicionales..................................................................................................25 3.4.2.-Parmetros Especiales.....................................................................................................25 3.5.-Expansiones de la shell...........................................................................................................26 3.5.1.-Expansin de Llaves.......................................................................................................27 3.5.2.-Expansin de Tildes........................................................................................................27 3.5.3.-Expansin de Parmetros de Shell..................................................................................28 3.5.4.-Sustitucin de Comandos...............................................................................................31 3.5.5.-Expansin Aritmtica.....................................................................................................32 3.5.6.-Sustitucin de Procesos..................................................................................................32 3.5.7.-Separacin de palabras....................................................................................................33 3.5.8.-Expansin de Nombres de Fichero.................................................................................33 3.5.8.1.-Concordancia de Patrones.......................................................................................34 3.5.9.-Eliminacin del entrecomillado......................................................................................35 3.6.-Redirecciones.........................................................................................................................35 3.6.1.-Redireccionando la entrada.............................................................................................36 3.6.2.-Redireccionando la salida...............................................................................................36
Pgina v

ndice de Contenido

3.6.3.-Anexando la salida redirigida.........................................................................................37 3.6.4.-Redirigiendo la Salida Estndar y la Salida de Error Estndar.......................................37 3.6.5.-Anexando la Salida Estndar y la Salida de Error Estndar...........................................37 3.6.6.-Documentos Internos (Here Documents).......................................................................37 3.6.7.-Cadenas Internas (Here strings)......................................................................................38 3.6.8.-Duplicando Descriptores de Fichero...............................................................................38 3.6.9.-Moviendo Descriptores de Fichero.................................................................................38 3.6.10.-Abriendo descriptores de fichero para lectura y escritura............................................38 3.7.-Ejecutando comandos.............................................................................................................39 3.7.1.-Expansin de un comando simple..................................................................................39 3.7.2.-Bsqueda y Ejecucin de Comandos..............................................................................39 3.7.3.-Entorno de Ejecucin de Comandos...............................................................................40 3.7.4.-Entorno...........................................................................................................................41 3.7.5.-Estados de Salida............................................................................................................42 3.7.6.-Seales............................................................................................................................42 3.8.-Guiones de Shell.....................................................................................................................43 4.-Comandos Internos de la Shell.......................................................................................................44 4.1.-Comandos Internos de la Shell Bourne..................................................................................44 4.2.-Comandos Internos de Bash...................................................................................................51 4.3.-Modificando el Comportamiento de la Shell..........................................................................61 4.3.1.-El comando Interno Set..................................................................................................61 4.3.2.-El Comando Interno Shopt.............................................................................................66 4.4.-Comandos Internos Especiales...............................................................................................71 5.-Variables de Shell..........................................................................................................................73 5.1.-Variables de la Shell Bourne..................................................................................................73 5.2.-Variables de Bash...................................................................................................................74 6.-Caractersticas de Bash..................................................................................................................85 6.1.-Invocando a Bash...................................................................................................................85 6.2.-Ficheros de Inicio de Bash.....................................................................................................87 6.3.-Shells Interactivas...................................................................................................................89 6.3.1.-Qu es una Shell Interactiva?........................................................................................89 6.3.2.-Es esta una shell Interactiva?........................................................................................89 6.3.3.-Comportamiento de la Shell Interactiva.........................................................................89 6.4.-Expresiones Condicionales de Bash.......................................................................................91 6.5.-Aritmtica de la Shell.............................................................................................................93 6.6.-Alias........................................................................................................................................94 6.7.-Arrays.....................................................................................................................................95 6.8.-La Pila de Directorios.............................................................................................................96 6.8.1.-Comandos Internos de la Pila de Directorios..................................................................96 6.9.-Controlando el Prompt...........................................................................................................97 6.10.-La Shell Restringida.............................................................................................................99 6.11.-El Modo POSIX de Bash......................................................................................................99 7.-Control de Tareas.........................................................................................................................103
Pgina vi

ndice de Contenido

7.1.-Fundamentos del Control de Tareas.....................................................................................103 7.2.-Comandos Internos para el Control de Tareas.....................................................................104 7.3.-Variables para el Control de Tareas.....................................................................................106 8.-Edicin de la Lnea de Comandos................................................................................................107 8.1.-Introduccin a la Edicin de la Lnea de Comandos............................................................107 8.2.-Interaccin con Readline......................................................................................................107 8.2.1.-Los Fundamentos de Readline al Desnudo...................................................................108 8.2.2.-Comandos de Movimiento de Readline........................................................................108 8.2.3.-Comandos para cortar texto de Readline......................................................................109 8.2.4.-Argumentos de Readline...............................................................................................109 8.2.5.-Buscando Comandos en la Historia..............................................................................110 8.3.-El Fichero de Inicializacin de Readline..............................................................................110 8.3.1.-La Sintaxis del Fichero de Inicializacin de Readline..................................................111 8.3.2.-Construcciones de inicializacin condicionales...........................................................117 8.3.3.-Ejemplo de Fichero de Inicializacin...........................................................................118 8.4.-Comandos enlazables de Readline.......................................................................................120 8.4.1.-Comandos de Movimiento............................................................................................120 8.4.2.-Comandos para Manipular la Historia..........................................................................121 8.4.3.-Comandos para Modificar el Texto..............................................................................122 8.4.4.-Cortando y Pegando......................................................................................................123 8.4.5.-Especificando Argumentos Numricos........................................................................125 8.4.6.-Permitiendo que Readline introduzca caracteres por t................................................125 8.4.7.-Macros de Teclado........................................................................................................127 8.4.8.-Algunos comandos variados.........................................................................................127 8.5.-Modo vi de Readline............................................................................................................130 8.6.-Completado Programable.....................................................................................................130 8.7.-Comandos Internos para el Completado Programable.........................................................132 9.-Usando la Historia Interactivamente............................................................................................137 9.1.-Caractersticas de Historia de Bash......................................................................................137 9.2.-Comandos Internos para la Historia de Bash.......................................................................138 9.3.-Expansin de la Historia.......................................................................................................139 9.3.1.-Designadores de Evento...............................................................................................140 9.3.2.-Designadores de Palabra...............................................................................................140 9.3.3.-Modificadores...............................................................................................................141 10.-Instalando Bash..........................................................................................................................143 10.1.-Instalacin Bsica...............................................................................................................143 10.2.-Compiladores y Opciones...................................................................................................144 10.3.-Compilando para Mltiples Arquitecturas.........................................................................144 10.4.-Nombres de Instalacin......................................................................................................144 10.5.-Especificando el Tipo de Sistema.......................................................................................145 10.6.-Compartiendo Valores por Defecto....................................................................................145 10.7.-Controles de Operacin......................................................................................................145 10.8.-Caractersticas Opcionales..................................................................................................145
Pgina vii

ndice de Contenido

Apndice A: Informando de errores................................................................................................150 C.2.-Diferencias Principales con la Shell de Bourne........................................................................151 B.1.-Diferencias de Implementacin con la Shell SVR4.2.........................................................156 Apndice C: GNU Free Documentation License............................................................................157 C.0.-PREAMBLE........................................................................................................................157 C.1.-APPLICABILITY AND DEFINITIONS............................................................................157 C.2.-VERBATIM COPYING......................................................................................................158 C.3.-COPYING IN QUANTITY.................................................................................................159 C.4.-MODIFICATIONS..............................................................................................................159 C.5.-COMBINING DOCUMENTS............................................................................................161 C.6.-COLLECTIONS OF DOCUMENTS..................................................................................161 C.7.-AGGREGATION WITH INDEPENDENT WORKS.........................................................161 C.8.-TRANSLATION.................................................................................................................162 D.0.1.-TERMINATION..............................................................................................................162 C.9.-FUTURE REVISIONS OF THIS LICENSE.......................................................................162 C.10.-RELICENSING.................................................................................................................163 C.11.-ADDENDUM: How to use this License for your documents...........................................163 Apndice D: Licencia de Documentacin Libre de GNU (Traduccin).........................................164 D.0.-PREMBULO.....................................................................................................................164 D.1.-APLICABILIDAD Y DEFINICIONES..............................................................................164 D.2.-COPIA LITERAL................................................................................................................166 D.3.-COPIADO EN CANTIDAD...............................................................................................166 D.4.-MODIFICACIONES...........................................................................................................167 D.5.-COMBINACIN DE DOCUMENTOS.............................................................................168 D.6.-COLECCIONES DE DOCUMENTOS...............................................................................169 D.7.-AGREGACIN CON TRABAJOS INDEPENDIENTES.................................................169 D.8.-TRADUCCIN...................................................................................................................169 D.9.-TERMINACIN.................................................................................................................169 D.9.1.-REVISIONES FUTURAS DE ESTA LICENCIA...........................................................170 D.10.-RE-LICENCIAMIENTO...................................................................................................170 D.11.-ADDENDUM: Cmo usar esta Licencia en sus documentos...........................................171 D.12.-Notas:.................................................................................................................................171 D.13.-Referencias:.......................................................................................................................171 Apndice 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 Parmetros y Variables........................................................................................173 E.4.-ndice de Funciones............................................................................................................175

Pgina viii

Captulo 1: Introduccin

1.- Introduccin
1.1.- Qu es Bash?
Bash es la shell, o interprete de comandos, para el sistema operativo GNU. El nombre es un acrnimo para el 'Bourne-Again Shell', un juego de palabras de Stephen Bourne, el autor del predecesor directo del actual shell Unix sh, que apareci en la Sptima Edicin de la versin de Unix de los Bell Labs Research (Laboratorios de Investigacin de Bell). Bash es ampliamente compatible con sh e incorpora caractersticas muy tiles de la Korn shell ksh y la C shell csh. Busca ser una implementacin conforme al IEEE POSIX Shell y Herramientas parte de la especificacin POSIX del IEEE (estndar IEEE 1003.1). Ofrece mejoras funcionales frente a sh tanto para uso interactivo como de programacin. Aunque el sistema operativo GNU proporciona otras shells, incluida una versin 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 ms 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 trmino procesador de macros indica una funcionalidad donde se expanden texto y smbolos para crear expresiones ms largas. Una shell de Unix es a la vez un interprete de comandos y un lenguaje de programacin. Como interprete de comandos, la shell proporciona una interfaz de usuario para el amplio juego de utilidades GNU. Las capacidades de lenguaje de programacin 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 categora que los comandos del sistema situados en directorios como '/bin', permitiendo a los usuarios o grupos establecer entornos personalizados para automatizar 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 ledos desde un fichero. Una shell permite la ejecucin de comandos GNU tanto de forma sncrona como asncrona. La shell espera hasta que se completan los comandos sncronos antes de aceptar ms entradas; los comandos asncronos continan ejecutndose paralelamente a la shell mientras que esta lee y ejecuta otros comandos. La redireccin permite un control detallado de la entrada y la salida de estos comandos. Ms an, la shell permite controlar el contenido de los entornos de los comandos. Las shells tambin proporcionan un pequeo juego de comandos internos (builtins) implementando funcionalidades que mediante utilidades separadas seran imposibles de obtener o lo haran 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 ms convenientes usados como comandos internos. Todos los comandos internos de la shell sern descritos en las secciones siguientes. Mientras que la ejecucin de comandos es esencial, gran parte del poder (y complejidad) de la
Pgina 9

Captulo 1: Introduccin

shell se debe a los lenguajes de programacin embebidos en ella. Como cualquier lenguaje de alto nivel, la shell proporciona variables, construcciones de control del flujo, entrecomillado y funciones. Las shells ofrecen caractersticas orientadas especficamente para el uso interactivo ms que para aumentar el lenguaje de programacin. Estas caractersticas interactivas incluyen control de tareas, edicin de la linea de comandos, historia de comandos y alias. Cada una de estas caractersticas son descritas en este manual.

Pgina 10

Captulo 2: Definiciones

2.- Definiciones
Estas definiciones son usadas a lo largo de este manual POSIX Una familia de estndares libres basados en Unix. Bash se ve afectado principalmente por la parte Shell y Utilidades del estndar POSIX 1003.1. blanco (blank) Un carcter espacio o tabulador comando interno o builtin Un comando que es implementado internamente por la shell, en vez de por un programa ejecutable en algn lugar del sistema de ficheros. operadores de control Un token que realiza una funcin de control. Es una nueva linea o alguno de los siguientes: ||, &&, &, ;, ;;, |, |&, (, o ). estado de salida El valor retornado por un comando a su llamador. Este valor est restringido a ocho bits, as que el valor mximo es 255. campo Una unidad de texto que es el resultado de una de las expansiones de la shell. Tras la expansin, cuando se ejecuta un comando, los campos resultantes se utilizan como nombre de comando y argumentos nombre de archivo Una cadena de caracteres usada para identificar un archivo. tarea Un juego de procesos que componen una tubera, y los procesos que descienden de estos, que estn todos en el mismo grupo de procesos. control de tareas Un mecanismo por el cual los usuarios pueden parar (suspender) y reiniciar (reanudar) selectivamente la ejecucin de procesos. metacaracter Un carcter que, cuando se encuentra sin entrecomillar, separa palabras. Un metacaracter es un blanco o uno de los siguientes caracteres: |, &, ;, (, ), <, o >. nombre Una palabra consistente nicamente en letras, nmeros y caracteres de subrayado, y que comienza con una letra o un carcter de subrayado. Los nombres se usan como nombres de variables de shell y de funciones. Tambin se le llama identificador. operador Un operador de control o un operador de redireccin. Vea en la seccin 3.6 [Redirecciones], una lista de operadores de redireccin. Los operadores contienen al menos un
Pgina 11

Captulo 2: Definiciones

metacaracter sin entrecomillar. grupo de procesos Una coleccin o procesos relacionados cada uno de los cuales tiene el mismo identificador de grupo de procesos. identificador (o ID) de grupo de procesos Un identificador nico que representa un grupo de procesos durante su tiempo de vida. palabra reservada Una palabra que tiene un significado especial para la shell. La mayora de las palabras reservadas introducen en la shell construcciones de control de flujo, como for y while. estado de retorno Un sinnimo para el estado de salida. seal Un mecanismo por el que cualquier proceso puede ser notificado por el kernel de un evento ocurrido en el sistema. comandos internos especiales Un comando interno de la shell que ha sido clasificado como especial por el estndar POSIX token (o componente lxico) Una secuencia de caracteres considerados una unidad nica por el shell. Puede ser bien una palabra o un operador. palabra Una secuencia de caracteres tratados como una unidad por el shell. Las palabras no pueden incluir metacaracteres sin entrecomillar.

Pgina 12

Capitulo 3: Caractersticas Bsicas del Shell

3.- Caractersticas Bsicas de la Shell


Bash es un acrnimo 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 estn disponibles en Bash. Las reglas para evaluacin y entrecomillado estn tomadas de la especificacin POSIX para la shell Unix 'estndar'. Este captulo resume brevemente los 'bloques de construccin' de la shell: comandos, estructuras de control, funciones de shell, parmetros 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 shell


Cuando 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 lnea. 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 segn 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 inspeccin o procesamiento.

3.1.1.- Modo de operacin de la shell


Lo que sigue es una breve descripcin del modo en que trabaja la shell cuando esta lee y ejecuta un comando. Bsicamente, la shell hace lo siguiente: 1. Lee su entrada desde un archivo (vea la Seccin 3.8 [Guiones de shell]), desde una cadena suministrada como un argumento a la opcin de invocacin '-c' (vea la Seccin 6.1 [Invocando a Bash], o desde la terminal del usuario. 2. Rompe la entrada en palabras y operadores, obedeciendo las reglas de entrecomillado descritas en la Seccin 3.1.2 [Entrecomillado]. Estos tokens estn separados por metacaracteres. La expansin de Alias se realiza en este paso (vea Seccin 6.6 [Alias] 3. Analiza sintcticamente los tokens en comandos simples y compuestos (vea Seccin 3.2 [Comandos de Shell]) 4. Realiza varias expansiones de shell (vea la Seccin 3.5 [Expansiones de la Shell], rompe los tokens expandidos en listas de nombres de ficheros (vea Seccin 3.5.8 [Expansin de Nombres de Fichero]) y comandos y argumentos. 5. Realiza cualquier redireccin que sea necesaria (vea la Seccin 3.6 [Redirecciones]) y elimina los operadores de redireccin y sus operandos de la lista de argumentos. 6. Ejecuta el comando (vea la Seccin 3.7 [Ejecutando Comandos]). 7. Opcionalmente espera hasta que se complete la ejecucin del comando y recolecta su estado de salida (vea la Seccin 3.7.5 [Estados de salida]).

Pgina 13

Capitulo 3: Caractersticas Bsicas del Shell

3.1.2.- Entrecomillado
El entrecomillado se utiliza para eliminar el significado especial a ciertos caracteres o palabras para la shell. El entrecomillado se puede utilizar 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 expansin de parmetros. Cada uno de los metacaracteres de shell (vea el Captulo 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 expansin de la historia de comandos (vea la Seccin 9.3 [Interacciones con la Historia]), el carcter de expansin de la historia, normalmente '!', debe ser entrecomillado para prevenir la expansin de la historia. Vea la Seccin 9.1 [Caractersticas de Historial de Bash], para ms detalles concernientes a la expansin de la historia. Hay tres mecanismos de entrecomillado: El carcter de escape, las comillas simples y las comillas dobles.
3.1.2.1.- Carcter de Escape

El carcter de escape consiste en una barra invertida sin entrecomillar '\'. Esta mantiene el valor literal del carcter que le sigue, con la excepcin de la nueva lnea. Si aparece una pareja \nueva_linea esta es tratada como una continuacin de lnea (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 carcter 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 excepcin de '$', ''', '\' y, cuando la expansin de la historia est habilitada, '!'. Los caracteres '$' y ''' mantienen su significado especial dentro de comillas dobles (Vea la Seccin 3.5 [Expansiones de Shell]). La barra invertida mantiene su significado especial slo 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 precedindola con una barra invertida. Si est habilitada la expansin 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 parmetros especiales '*' y '@' tienen un significado especial cuando aparecen encerrados entre comillas dobles (vea la seccin 3.5.3 [Expansin de parmetros 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 estndar ANSI C. Las secuencias de escape con barra invertida, si estn presentes, son decodificadas como
Pgina 14

Capitulo 3: Caractersticas Bsicas del Shell

sigue: \a \b \e \E \f \n \r \t \v \\ \' \ \nnn \xHH \cx un carcter de escape (no ANSI C) carcter de alimentacin de lnea (form feed) carcter de nueva lnea carcter de retorno de carro tabulador horizontal tabulador vertical carcter barra invertida carcter comilla simple carcter comilla doble el carcter de 8 bits cuyo valor es el nmero octal nnn (de uno a tres dgitos). el carcter de 8 bits cuyo valor es el nmero hexadecimal HH (uno o dos dgitos hexadecimales) un carcter control-x alerta(campana) retroceso (elimina el carcter anterior)

El resultado expandido se encuentra entrecomillado con comilla simple, como si el signo '$' no estuviese presente.
3.1.2.5.- Traducciones Especficas de la Localizacin

Una cadena entrecomillada con comillas dobles precedida por un signo ('$') causar que la cadena sea traducida de acuerdo a la localizacin actual. Si la localizacin actual es C o POSIX, el signo dlar es ignorado. Si la cadena es traducida y reemplazada, el sustituto es entrecomillado con comillas dobles. Algunos sistemas usan el catlogo de mensajes seleccionado por la variable de shell LC_MESSAGES . Otros crean el nombre del catlogo de mensajes a partir del valor de la variable del shell TEXTDOMAIN , posiblemente aadiendo un sufijo o '.mo'. Si usa la variable TEXTDOMAIN , puede necesitar ajustar la variable TEXTDOMAINDIR a la localizacin de los archivos del catlogo de mensajes. Otros incluso usan ambas variables de la forma: TEXTDOMAINDIR/LC_MESSAGES/TEXTDOMAIN.mo.

3.1.3.- Comentarios
En no-interactiva, o en una shell interactiva en la que la opcin interactive_comments para el comando interno shopt est activada (vea la seccin 4.3.2 [ El Comando Interno Shopt]), una palabra comenzando con '#' provoca que la palabra y todos los caracteres que le siguen en esa lnea sean ignorados. Una shell interactiva sin la opcin
Pgina 15

una

shell

Capitulo 3: Caractersticas Bsicas del Shell

interactive_comments activada no permite comentarios. La opcin interactive_coments

est establecida por defecto en las shells interactivas. Vea la seccin 6.3 [Shells Interactiva], para una descripcin de qu hace una shell interactiva.

3.2.- Comandos de Shell


Un comando de shell simple como echo a b c consiste en el propio comando seguido por argumentos separados por espacios. Comandos de shell ms complejos estn compuestos de comandos simples situados juntos de varias formas; en una tubera en la cual la salida de un comando se convierte en la entrada del segundo, en una construccin tipo bucle o condicional, o en algunas otras agrupaciones.

3.2.1.- Comandos simples


Un comando simple es el tipo de comando que se encuentra con ms frecuencia. Este es slo una secuencia de palabras separadas por blancos, terminada por uno de los operadores de control de la shell (vea el Captulo 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 Seccin 3.7.5 [Estado de salida]) de un comando simple es su estado de salida como viene especificado por la funcin POSIX 1003.1 waitpid, o 128+n si el comando fue terminado por la seal n.

3.2.2.- Tuberas
Una tubera es una secuencia de comandos simples separados por uno de los operadores de control '|' o '|&'. El formato de uso de una tubera es:
[time [-p]] [!] comando1 [ [| o |&] comando2 ]

La salida de cada comando en la tubera es conectado a travs del cauce a la entrada del siguiente comando. Esto es, cada comando lee la salida del comando previo. Esta conexin se establece antes de realizar cualquier redireccin especificada por el comando. Si se usa '|&' la salida de error estndar del comando1 es conectada a la entrada estndar del comando2 a travs del cauce; es una forma corta para 2>&1. Esta redireccin implcita de la salida de error estndar se realiza despus de cualquier redireccin especificada en el comando. La palabra reservada time produce que se impriman estadsticas de tiempo para la tubera una vez que esta finaliza. Las estadsticas actualmente consisten en el tiempo transcurrido y tiempo de usuario y de sistema consumidos por la ejecucin del comando. La opcin '-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 informacin de los tiempos. Vea la Seccin 5.2 [Variables de Bash] para obtener una descripcin 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 tuberas. Un comando externo time no podra hacer esto fcilmente. Si la tubera no se ejecuta de forma asncrona (vea la Seccin 3.2.3 [Listas]) la shell espera hasta que se completen todos los comandos de la tubera. Cada comando en una tubera se ejecuta en su propia subshell (vea la Seccin 3.7.3 [Entorno de Ejecucin de Comandos]). El estado de salida de una tubera es el estado de salida de el ltimo
Pgina 16

Capitulo 3: Caractersticas Bsicas del Shell

comando en la tubera, a menos que la opcin pipefail est activada (vea la Seccin 4.3.1 [El Comando Interno Set]) Si pipefail est activado, el estado de retorno de la tubera es el valor del ltimo comando (el ms 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 tubera, el estado de salida es la negacin lgica del estado de salida como se describi ms arriba. El shell espera hasta que todos los comandos en la tubera terminen antes de retornar un valor.

3.2.3.- Listas de Comandos


Una lista es una secuencia de una o ms tuberas separadas por uno de los siguientes operadores: ';', '&', '&&', o '||', y opcionalmente terminada por uno de los siguientes: ';', '&', o una nueva lnea. De estos operadores de lista '&&' y '||' tienen igual precedencia, seguidos por ';' y '&', que tienen igual precedencia. Una secuencia de una o ms nuevas lneas 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 asncrona 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 Captulo 7 [Control de Tareas]), la entrada estndar para los comandos asncronos, en ausencia de alguna redireccin explcita, es redirigida desde /dev/null. Los comandos separados por un ';' se ejecutan secuencialmente; la shell espera para que cada comando finalice turnndose 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 ms tuberas separadas por los operadores de control '&&' y '||' respectivamente. Las listas AND y OR son ejecutadas con asociatividad a la izquierda Una lista AND tiene la forma
comando1 && comando2 comando2 se ejecuta s y slo s el comando1 retorna un estado de salida de cero.

Una lista OR tiene la forma


comando1 || comando2 comando2 se ejecuta s y slo s, el comando1 retorna un valor de salida distinto de cero.

El estado de retorno de las listas AND y OR es el estado de salida del ltimo comando ejecutado en la lista.

3.2.4.- Comandos Compuestos


Los comandos compuestos son las construcciones de programacin de la shell. Cada construccin comienza con una palabra reservada o un operador de control y termina con otra correspondiente palabra reservada u operador. Cualquier redireccin (vea la Seccin 3.6 [Redirecciones]) asociada con un comando compuesto se aplica a todos los comandos dentro de ese comando compuesto, a menos que sea sobreescrito explcitamente. Bash proporciona construcciones cclicas, comandos condicionales y mecanismos para agrupar comandos y ejecutarlos como una unidad.
Pgina 17

Capitulo 3: Caractersticas Bsicas del Shell

3.2.4.1.- Construcciones Cclicas

Bash soporta las siguientes construcciones cclicas (en forma de bucle). Note que en cualquier lugar en el que aparezca un ';' en la descripcin de la sintaxis de un comando este puede ser reemplazado por una o ms nuevas lneas.
until

La sintaxis del comando until es:


until comandos-test; do comandos-consiguientes; done Ejecuta los comandos-consiguientes mientras que los comandos-test tengan un estado de

salida distinto de cero. El estado de retorno es el estado de salida del ltimo comando ejecutado en comandos-consiguientes, o cero si no se ejecut ninguno.
while

La sintaxis del comando while es:


while comandos-test; do comandos-consiguientes; done Ejecuta los comandos-consiguientes mientas que los comandos-test tengan un estado de

salida igual a cero. El estado de retorno es el estado de salida del ltimo comando ejecutado en comandos-consiguientes, o cero si no se ejecut ninguno.
for

La sintaxis del comando for es:


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

Expande las palabras y ejecuta los comandos uno por cada miembro en la lista resultante, con nombre asignado al miembro actual. Si 'in palabras' no est presente, el comando for ejecuta los comandos uno por cada parmetro posicional que se le pase, como si se hubiera especificado 'in $@' (vea la Seccin 3.4.2 [Parmetros Especiales]). El estado de retorno es el estado de salida del ltimo comando que ejecuta. Si no hay miembros en la expansin de palabras, no se ejecuta ningn comando y el estado de retorno es cero. Bash tambin soporta una forma alternativa para el comando for:
for (( expr1 ; expr2 ; expr3 )) ; do comandos ; done Primero se evala la expresin aritmtica expr1 de acuerdo con las reglas descritas ms

abajo (vea la Seccin 6.5 [Aritmtica de la Shell]). A continuacin se evala repetidamente la expresin aritmtica expr2 hasta que su valor sea cero. Cada vez que expr2 se evala con un valor distinto de cero, se ejecutan los comandos y se evala la expresin expr3 .Si se omite alguna expresin se toma como si esta se evaluara a 1. El valor devuelto es el estado de salida del ltimo comando que se ejecuta en la lista, o false si alguna de las expresiones es invlida. Los comandos internos break y continue (vea la Seccin 4.1 [Comandos internos de la Shell Bourne]) pueden ser usados para controlar la ejecucin del bucle.
3.2.4.2.- Construcciones Condicionales
if

La sintxis del comando if es:

Pgina 18

Capitulo 3: Caractersticas Bsicas del Shell

if comandos-test; then comandos-consiguientes [elif mas-comandos-test; then ms-siguientes;] [else alternativas-consiguientes; ] fi Se ejecuta la lista de comandos-test 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 construccin '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 condicin fue evaluada como true.

case

La sintaxis del comando case es:


case palabra in [ [(] patrn [| patrn] .) listacomandos ;;]... esac case ejecutar selectivamente la lista-comandos correspondiente al primer patrn que se ajusta con palabra. Si la opcin de shell nocasematch (vea la descripcin de shopt en

la Seccin 4.3.2 [El Comando Interno Shopt]) est activada, el ajuste se realiza sin diferenciar entre maysculas y minsculas para los caracteres alfabticos. El '|' se usa para separar patrones mltiples, 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 expansin de tildes, expansin de parmetros, sustitucin de comandos, expansin aritmtica y eliminacin de entrecomillado antes de intentar el ajuste. Cada patrn sufre expansin del tildes, expansin de parmetros, sustitucin de comandos y expansin aritmtica. Puede haber un nmero arbitrario de clausulas case, cada una terminada con un ';;', ';&' o ';;&'. El primer patrn que ajusta determina la lista-comandos que ser ejecutada. Aqu hay un ejemplo usando case en un guin que se puede utilizar para describir una interesante caracterstica de un animal:
echo -n "Introduzca el nombre de un animal: " read ANIMAL echo -n "El $ANIMAL tiene " case $ANIMAL in caballo | perro | gato) echo -n "cuatro";; hombre | canguro ) echo -n "dos";; *) echo -n "un nmero desconocido de";; esac echo " patas."

Si se utiliza el operador ';;' no se intenta ningn ajuste adicional tras el primer patrn encontrado. Usar ';&' en vez de ';;' produce que la ejecucin contine con la lista- comandos asociada con la siguiente clausula, si hay alguna. Usar ';;&' en vez de
Pgina 19

Capitulo 3: Caractersticas Bsicas del Shell

';;' produce que la shell pruebe a ajustar los patrones en la siguiente clausula, si hay alguna, y ejecuta cualquier lista-comandos asociada a los ajustes conseguidos. El estado de retorno es cero si no se ajusta a ningn patrn. De otro modo, el estado de retorno es la salida del estado de la lista-comandos ejecutada.
select

La construccin select permite generar mens fcilmente. 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 estndar, cada una precedida por un nmero. Si se omite la construccin 'in palabras' se imprimen los parmetros posicionales, como si se hubiese especificado 'in $@'. A continuacin se muestra el prompt PS3 y se lee una lnea desde la entrada estndar. Si la linea consiste en un nmero correspondiente a una de las palabras mostradas, entonces el valor de nombre es ajustado a esa palabra. Si la linea est vaca, las palabras y el prompt se muestran de nuevo. Si se lee EOF (fin de fichero), el comando select finaliza. Cualquier otro valor ledo produce que nombre se establezca a null. La linea leda es salvada en la variable REPLY. Los comandos son ejecutados despus de cada seleccin hasta que se ejecuta un comando break, punto en el que el comando select finaliza. A continuacin 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

(( )) (( expresin ))

La expresin aritmtica se evala de acuerdo a las reglas descritas ms abajo (vea la seccin 6.5 [Aritmtica del Shell]). Si el valor de la expresin 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 expresin

Vea la Seccin 4.2 [Comandos Internos de Bash] para una descripcin completa del comando interno let.
[[ ]] [[ expresin ]]

Devuelve un estado de 0 1 dependiendo de la evaluacin de la expresin condicional expresin. Las expresiones se componen de expresiones fundamentales descritas ms abajo en la Seccin 6.4 [Expresiones Condicionales de Bash]. La divisin de palabras y la expansin de nombres de archivo no se realiza en las palabras encerradas entre '[[' y
Pgina 20

Capitulo 3: Caractersticas Bsicas del Shell

']]'; se realizan la expansin de tildes, la expansin de parmetros y variables, la expansin aritmtica, la sustitucin de comandos, la sustitucin de procesos y la eliminacin del entrecomillado. Los operadores condicionales como '-f' deben ser desentrecomillados para que sean reconocidos como primarios. Cuando se usan con '[[', los operadores '<' y '>' ordenan lexicogrficamente usando la localizacin actual. Cuando se usan los operadores '==' y '!=' la cadena a la derecha del operador se considera como un patrn y ajusta conforme a las reglas descritas ms abajo, en la Seccin 3.5.8.1 [Ajuste a Patrones]. Si la opcin de shell nocasematch (vea la descripcin de shopt en la Seccin 4.3.2 [El Comando Interno Shopt]) est activada, el ajuste se realiza sin diferenciar entre minsculas y maysculas en el caso de caracteres alfabticos. El valor devuelto es 0 si las cadenas ajustan ('==') o no ajustan ('!=') al patrn, y 1 de otro modo. Cualquier parte del patrn 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 expresin regular extendida y ajustada en consecuencia (como en regex3). El valor devuelto es 0 si la cadena ajusta al patrn, y 1 en otro caso. Si la expresin regular es incorrecta sintcticamente el valor devuelto de la expresin condicional es 2. Si la opcin de la shell nocasematch (vea la descripcin de shopt en la Seccin 4.3.2 [El Comando Interno Shopt]) est activada, el ajuste se realiza sin diferenciar entre maysculas y minsculas para los caracteres alfabticos. Cualquier parte del patrn puede ser entrecomillado para forzar a que este ajuste como una cadena. Las subcadenas ajustadas por subexpresiones parentizadas dentro de la expresin regular son guardadas en la variable de tipo array BASH_REMATCH. Los elementos de BASH_REMATCH con ndice 0 ser la porcin de la cadena que ajusta con la expresin regular completa. El elemento de BASH_REMATCH con el ndice n es la porcin de la cadena que encaja con la n-sima subexpresin parentizada. Las expresiones se pueden combinar usando los siguientes operadores, listados en orden de precedencia decreciente:
( expresin )

Devuelve el valor de expresin. Este se puede utilizar para sobrescribir la precedencia normal de los operadores.
! expresin

Devuelve true si la expresin es false


expresin1 && expresin2 Devuelve true si tanto expresin1 como expresin2 son true. expresin1 || expresin2 Devuelve true si expresin1 o expresin2 son true.

Los operadores && y || no evalan expresin2 si el valor de expresin1 es suficiente para determinar el valor devuelto por la expresin condicional completa.

Pgina 21

Capitulo 3: Caractersticas Bsicas del Shell

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 un nico flujo. ()
( lista )

Encerrar una lista de comandos entre parntesis produce que se cree un entorno de subshell (vea la Seccin 3.7.3 [Entorno de Ejecucin de Comandos]), y cada uno de los comandos en lista ser ejecutado en ese subshell. Puesto que la lista se ejecuta en una subshell, el efecto de la asignacin de variables no permanece tras la finalizacin 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 ningn subshell. El punto y coma (o nueva lnea) que sigue a lista es obligatorio. A parte de la creacin de la subshell hay una sutil diferencia entre el uso de estas dos construcciones debido a razones histricas. Las llaves son palabras reservadas, as que deben ser separadas de la lista de comandos por blancos u otros metacaracteres de shell. Los parntesis son operadores, y son reconocidos como tokens separados por la shell incluso si no estn 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.- Coprocesos
Un coproceso es un comando de shell precedido por la palabra reservada coproc. Un coproceso se ejecuta asncronamente 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 ejecucin y el coproceso. El formato de ejecucin 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 Seccin 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 Seccin 6.7 [Arrays]), llamada NOMBRE en el contexto de la shell en ejecucin. La salida estndar del comando se conecta a travs de un cauce a un descriptor de fichero en la shell en ejecucin, y este descriptor de fichero se asigna a NOMBRE[0] . La entrada estndar del comando se conecta a travs de un cauce a un descriptor de fichero en la shell en ejecucin, y ese descriptor de fichero se asigna a NOMBRE[1] . Este cauce es establecido antes de cualquier redireccin especificada por el comando (vea la Seccin 3.6 [Redirecciones]). El descriptor de fichero se puede utilizar como argumento para los comandos de shell y las redirecciones usando expansiones de palabra estndar.
Pgina 22

Capitulo 3: Caractersticas Bsicas del Shell

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.

3.3.- Funciones de Shell


Las funciones de shell son una manera de agrupar comandos para ejecutarlos ms 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 funcin de shell como un simple nombre de comando, se ejecuta la lista de comandos asociados con ese nombre de funcin. Las funciones de shell son ejecutadas en el contexto actual de la shell; no se crea ningn nuevo proceso para interpretarlas. Las funciones se declaran usando la siguiente sintaxis:
[ function ] nombre () comando-compuesto [ redirecciones ]

Esto define una funcin de shell llamada nombre. La palabra reservada function es opcional. Si se suministra la palabra reservada function, los parntesis son opcionales. El cuerpo de la funcin es el comando compuesto comando-compuesto (vea la Seccin 3.2.4 [Comandos Compuestos]). Este comando es normalmente una lista encerrada entre { y }, pero puede ser cualquier comando compuesto listado ms arriba. El comando-compuesto se ejecuta en cualquier lugar donde se especifique nombre como nombre de un comando. Cualquier redireccin (vea la Seccin 3.6 [Redirecciones]) asociada con la funcin de shell se lleva a cabo cuando se ejecuta la funcin. Una definicin de funcin se puede eliminar usando la opcin '-f' con el comando interno unset (vea la Seccin 4.1 [Comandos Internos de la Shell Bourne]). El estado de salida de una definicin de funcin es cero a menos que ocurra un error de sintaxis o que previamente exista una funcin de slo lectura con el mismo nombre. Cuando se ejecuta la funcin, el estado de salida de esta es el estado de salida del ltimo comando ejecutado en el cuerpo de su definicin. Advierta que por razones histricas, en su uso ms comn las llaves que rodean el cuerpo de la funcin deben estar separadas del cuerpo mediante caracteres blancos o nuevas lineas. Este es debido a que las llaves son palabras reservadas y son slo reconocidas como tales cuando estn separadas de la lista de comandos por espacios en blanco o cualquier otro metacaracter de shell. Tambin, cuando usamos llaves, la lista de comandos debe terminar en un punto y coma, un '&', o una nueva lnea. Cuando se ejecuta una funcin, los argumentos pasados a la funcin se convierten en parmetros posicionales durante su ejecucin (vea la Seccin 3.4.1 [Parmetros Posicionales]). El parmetro especial '#' que se expande al nmero de parmetros posicionales, es actualizado para reflejar el cambio. El parmetro especial 0 permanece sin cambios. El primer elemento de la variable FUNCNAME se asigna al nombre de la funcin mientras que la funcin est en ejecucin. Todos los dems aspectos del entorno de ejecucin de la shell son los mismos para la funcin y su llamador con estas excepciones: las trampas DEBUG y RETURN no son heredades a menos que se le haya dado a la funcin el atributo trace usando el comando interno declare o se haya activado la opcin '-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 opcin de shell 'Pgina 23

Capitulo 3: Caractersticas Bsicas del Shell

o errtrace' haya sido activada. Vea la Seccin 4.1 [Comandos Internos de la Shell Bourne], para una descripcin del comando interno trap. Si se ejecuta el comando interno return en una funcin, la funcin termina y la ejecucin

continua con el siguiente comando despus de la llamada a la funcin. Cuando una funcin termina, los valores de los parmetros posicionales y el parmetro especial '#' son restaurados a los valores que tenan antes de la ejecucin de la funcin. Si se proporciona a return un argumento numrico, este es el estado devuelto por la funcin; de otro modo el estado devuelto por la funcin es el estado de salida del ltimo comando ejecutado antes del return; Se pueden declarar variables locales a la funcin utilizando el comando interno local. Estas variables son visibles slo para la funcin y los comandos que esta invoca. Los nombres de funcin y sus definiciones pueden ser listadas con la opcin '-f' de los comandos internos declare o typeset (vea la Seccin 4.2 [Comandos Internos de Bash]). La opcin '-F' de los comandos internos declare o typeset listar nicamente los nombres de las funciones (y opcionalmente el archivo fuente y el nmero de lnea, si la opcin de shell extdebug est activada). Las funciones pueden ser exportadas con la opcin '-f' del comando interno export (vea la Seccin 4.1 [Comandos Internos de la Shell]), de forma que los subshells las tengan definidas automticamente. Advierta que tener funciones y variables de shell con el mismo nombre puede llevar a tener mltiples 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 lmite en el nmero de llamadas recursivas posibles.

3.4.- Parmetros de Shell


Un parmetro es una entidad que almacena valores. Este puede ser un nombre, un nmero o uno de los caracteres especiales listados ms abajo. Una variable es un parmetro identificado por un nombre. Una variable tiene un valor y cero o ms atributos. Los atributos son asignados usando el comando interno declare. (vea la descripcin del comando interno declare en la Seccin 4.2 [Comandos Internos de Bash]). Un parmetro est establecido si le ha sido asignado un valor. La cadena nula es un valor vlido. 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 expansin de tilde, expansin de parmetros y variables, sustitucin de comandos, expansin aritmtica y eliminacin de entrecomillado (detallado ms abajo). Si la variable tiene establecido su atributo integer, entonces su valor se evala como una expresin aritmtica incluso si no se ha usado la expansin $(( )) (vea la Seccin 3.5.5 [Expansin Aritmtica]. La divisin de palabras no se realiza, con la excepcin de $@ como se explica ms abajo. No se realiza la expansin de nombres de fichero. Las sentencias de asignacin pueden aparecer tambin como argumentos en los comandos internos alias, declare, typeset, export, readonly y local. En el contexto donde una sentencia de asignacin est asignando un valor a una variable de la shell o un ndice de un array (vea la Seccin 6.7 [Arrays]), el operador '+=' se puede utilizar para
Pgina 24

Capitulo 3: Caractersticas Bsicas del Shell

agregar o aadir 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 evala como una expresin aritmtica y se aade al valor actual de la variable, la cual tambin se evala. Cuando se aplica el operador '+=' a una variable de tipo array usando una asignacin compuesta (vea la Seccin 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 mximo ndice del array (para arrays indexados), o aadido 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.- Parmetros posicionales


Un parmetro posicional es un parmetro denotado por uno o ms dgitos, distintos al dgito 0. Los parmetros posicionales se asignan desde los argumentos de la shell cuando esta es invocada, y pueden ser reasignados usando el comando interno set. El parmetro posicional N puede ser referenciado como ${N}, o como $N cuando N consiste en un nico dgito. Los parmetros posicionales no pueden ser asignados con sentencias de asignacin. Se utilizan los comandos internos set y shift para establecer y eliminar estos parmetros (vea el Captulo 4 [Comandos Internos de la Shell]). Los parmetros posicionales son reemplazados temporalmente cuando se ejecuta una funcin de shell (vea la Seccin 3.3 [Funciones de la Shell]). Cuando se expande un parmetro posicional consistente en ms de un nico dgito, este debe ser encerrado entre llaves.

3.4.2.- Parmetros Especiales


La shell trata a varios parmetros de forma especial. Estos parmetros nicamente pueden ser referenciados; la asignacin a ellos no est permitida.
*

Se expande a los parmetros posicionales, comenzando por el uno. Cuando la expansin ocurre entre dobles comillas se expande a una nica palabra con el valor de cada uno de los parmetros separados por el primer carcter de la variable especial IFS . Esto es, $* es equivalente a $1c$2c... , donde c es el primer carcter del valor de la variable IFS. Si la variable IFS no est establecida, los parmetros se separan con espacios. Si IFS es nulo, los parmetros se unen sin utilizar ningn tipo de separador. Se expande a los parmetros posicionales, empezando por el uno. Cuando la expansin ocurre entre comillas dobles cada parmetro es expandido a una palabra separada del resto. Esto es, $@ es equivalente a $1 $2 .Si la expansin con comillas dobles ocurre dentro de una palabra, la expansin del primer parmetro se une con la parte inicial de la palabra original, y la expansin del ltimo parmetro se une con la ltima parte de la palabra original. Cuando no hay parmetros posicionales $@ y $@ se expanden a nada (es decir, son eliminados). Se expande al nmero de parmetros posicionales en el sistema decimal Se expande al estado de salida de la tubera ejecutada en primer plano ms recientemente.

# ?

Pgina 25

Capitulo 3: Caractersticas Bsicas del Shell

(Un guin). Se expande a las banderas de opcin actuales como se especific en la invocacin, mediante el comando interno set, o aquellas especificadas por la propia shell (como la opcin '-i'). Se expande al id de proceso de la shell. En una subshell dada por ( ), esta variable se expande a la id del proceso de la shell padre, no de la subshell. Se expande al id del proceso del comando ejecutado en segundo plano ms recientemente (de forma asncrona). Se expande al nombre de la shell o del guin de shell. Este se establece en el inicio de la shell. Si Bash es invocado con un archivo de comandos (vea la Seccin 3.8 [Guiones de Shell]), $0 se asigna al nombre de ese archivo. Si Bash se inicia con la opcin '-c' (vea la Seccin 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 carcter de subrayado). Al inicio de la shell, contiene la ruta absoluta usada para invocar la shell o el guin de shell que est siendo ejecutado tal cmo se pas en el entorno o en la lista de argumentos. Posteriormente, expande al ltimo argumento del comando previo, tras la expansin. Tambin 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 parmetro mantiene el nombre del archivo de correo.

$ ! 0

3.5.- Expansiones de la shell


La expansin se realiza en la lnea de comandos despus de que esta haya sido dividida en tokens. Se realizan siete tipos de expansiones: expansin de llaves expansin de tildes expansin de parmetros y variables sustitucin de comandos expansin aritmtica divisin de palabras expansin de nombres de archivo. El orden de las expansiones es: expansin de llaves, expansin de tildes, expansin de parmetros y variables, expansin aritmtica y sustitucin de comandos (realizada de izquierda a derecha), divisin de palabras y expansin de nombres de archivo. En sistemas que lo soporten hay disponible un tipo adicional de expansin: la sustitucin de procesos. Esta se realiza al mismo tiempo que la expansin de parmetros y variables, la expansin aritmtica y la sustitucin de comandos. Slo la expansin de llaves, la divisin de palabras y la expansin de nombres de fichero pueden cambiar el nmero de palabras de la expansin; otras expansiones expanden de palabra a palabra. La nica excepcin a esto son las expansiones de $@ (vea la Seccin 3.4.2 [Parmetros Especiales]) y ${nombre[@]} (vea la Seccin 6.7 [Array])
Pgina 26

Capitulo 3: Caractersticas Bsicas del Shell

Despus de realizar todas las expansiones se realiza la eliminacin del entrecomillado (vea la Seccin 3.5.9 [Eliminacin del Entrecomillado]).

3.5.1.- Expansin de Llaves


La expansin de llaves es un mecanismo por el cual se pueden generar cadenas arbitrarias. Este mecanismo es similar a la expansin de nombres de fichero (vea la Seccin 3.5.8 [Expansin de Nombres de Fichero]), pero los nombres de archivo generados no existen. Los patrones para la expansin de llaves tienen la forma de un prembulo opcional, seguido por o bien una serie de cadenas separadas por comas o bien una expresin secuencia encerrada entre llaves, seguido por un eplogo opcional. El prembulo se usa como prefijo para cada una de las cadenas contenidas entre las llaves, y el eplogo se aade 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 expresin 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 expresin expande a cada nmero entre x e y, ambos inclusive. Los enteros suministrados pueden ir precedidos de '0' para forzar a que cada trmino tenga la misma longitud. Cuando x o y comienzan con un cero, la shell intenta forzar a todos los trminos generados a contener el mismo nmero de dgitos, aadiendo ceros a la izquierda cuando sea necesario. Cuando se suministran caracteres, la expresin se expande lexicogrficamente a cada carcter 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 trminos. El incremento por defecto es 1 o -1 segn corresponda. La expansin de llaves se realiza antes de cualquier otra expansin, y cualquier carcter especial para otras expansiones se mantiene en el resultado. Esto es estrictamente textual. Bash no aplica ninguna interpretacin sintctica al contexto de la expansin o al texto entre los corchetes. Para evitar conflictos con la expansin de parmetros, la cadena '${' no se considera apta para la expansin de llaves. Una expansin de llaves formada correctamente debe contener las llaves de apertura y de cierre sin entrecomillar, y al menos una coma o una expresin secuencia sin entrecomillar en ambos casos. Cualquier expansin de llaves formada incorrectamente permanecer sin cambios. Un '{' o una ',' pueden ser entrecomilladas con una barra invertida para prevenir que sea considerada como parte de una expresin de llaves. Esta construccin es frecuentemente usada como una abreviatura cuando el prefijo comn de la cadena a generar es mayor que en el ejemplo siguiente:
mkdir /usr/local/src/bash/{old,new,dist,bugs}

Pgina 27

Capitulo 3: Caractersticas Bsicas del Shell

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

3.5.2.- Expansin de Tildes


Si una palabra comienza con un carcter tilde ('~ ') sin entrecomillar todos los caracteres anteriores a la primera barra no entrecomillada (o todos los caracteres si no hay barras sin entrecomillar) son considerados como un prefijo-tilde. Si ninguno de los caracteres en el prefijo-tilde estn entrecomillados, los caracteres en el prefijo-tilde que siguen a la tilde son tratados como un posible nombre de inicio de sesin. Si este nombre de inicio de sesin 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 sesin especificado. Si el prefijo-tilde es '~+', el valor de la variable PWD reemplaza al prefijo-tilde. Si el prefijotilde 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 nmero N, opcionalmente 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 Seccin 6.8 [La Pila de Directorios]). Si el prefijotilde, sin la tilde, consiste en un nmero sin que vaya acompaado de '+' o '-', se asume que va acompaado del signo '+'. Si el nombre de inicio de sesin es invlido, o la expansin de tilde falla, la palabra se mantiene sin cambios. Cada asignacin de variables se comprueba inmediatamente en busca de prefijos-tilde sin entrecomillar siguiendo al ':' o al primer '='. En estos casos, la expansin 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:
~ ~/foo ~fred/foo ~+foo ~-/foo ~N ~+N ~-N

El valor de $HOME '$HOME/foo' El subdirectorio foo del directorio home del usuario fred '$PWD/foo' '${OLDPWD-'~-'}/foo' La cadena que sera mostrada por 'dirs +N' La cadena que sera mostrada por 'dirs +N' La cadena que sera mostrada por 'dirs +N'

3.5.3.- Expansin de Parmetros de Shell


El carcter '$' inicia la expansin de parmetros, la sustitucin de comandos o la expansin aritmtica. El nombre del parmetro o el smbolo 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
Pgina 28

Capitulo 3: Caractersticas Bsicas del Shell

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 expansin aritmtica, sustitucin de comandos o expansin de parmetros embebidas. La forma bsica de la expansin de parmetros es ${parmetro} . Se sustituye el valor de parmetro. Las llaves son obligatorias cuando el parmetro es un parmetro posicional con ms de un dgito o cuando el parmetro es seguido por un carcter que no debe ser interpretado como parte de su nombre. Si el primer carcter del parmetro es una exclamacin de cierre (!), se realiza una indireccin de variables de un nivel. Bash utiliza el valor de la variable formada con el resto del parmetro como el nombre de la variable; esta variable entonces se expande y ese valor se utiliza en el resto de la sustitucin, en vez del valor del parmetro por s mismo. Esto se conoce como expansin indirecta. Las excepciones a esto son las expansiones ${!prefijo*} y ${!nombre[@]} descritas ms abajo. La exclamacin de cierre debe ir inmediatamente a continuacin de la llave izquierda para que indique la indireccin. En todos los casos que se dan ms abajo, palabra se somete a expansin de tildes, expansin de parmetros, sustitucin de comandos y expansin aritmtica. Cuando no se realiza la expansin de subcadenas, usando la forma descrita ms abajo, Bash analiza en busca de un parmetro que no est establecido o sea nulo. Omitir el dos puntos resulta en que el chequeo se realiza slo en busca de un parmetro que no est establecido. Dicho de otro modo, si se incluye el dos puntos, el operador chequea tanto la existencia del parmetro como que su valor no sea nulo; si el dos puntos se omite, el operador chequea nicamente la existencia.
${parmetro:-palabra}

Si el parmetro no est establecido o es nulo, se sustituye por la expansin de palabra. De otro modo, se sustituye por el valor de parmetro.
${parmetro:=palabra}

Si el parmetro no est establecido o es nulo se asigna a parmetro la expansin de palabra. Luego se sustituye por el valor de parmetro. Los parmetros posicionales y los parmetros especiales no pueden ser asignados de este modo.
${parmetro:?palabra}

Si el parmetro es nulo o no est establecido, se escribe en la salida de error estndar la expansin de palabra (o un mensaje a tal efecto si palabra no est presente) y la shell, si no es interactiva, termina. De otro modo, se sustituye por el valor de parmetro.
${parmetro:+palabra}

Si el parmetro es nulo o no est establecido, no realiza ninguna sustitucin, de otro modo se sustituye por la expansin de palabra
${parmetro:desplazamiento} ${parmetro:desplazamiento:longitud}

Expande hasta longitud caracteres del parmetro comenzando por el carcter especificado por desplazamiento. Si se omite longitud, expande a la subcadena de parmetro
Pgina 29

Capitulo 3: Caractersticas Bsicas del Shell

que comienza en el carcter especificado por desplazamiento. longitud y desplazamiento son expresiones aritmticas (vea la Seccin 6.5 [Aritmtica de la Shell]). Esto es conocido como Expansin de Subcadenas.
longitud debe evaluarse a un nmero mayor o igual que cero. Si el desplazamiento se evala como un nmero menor que cero, entonces el valor del desplazamiento se cuenta desde el final del valor de parmetro. Si el parmetro es '@', el resultado es longitud parmetros posicionales comenzando en desplazamiento. Si el parmetro es el nombre de un array indexado seguido por '@' o '*', el resultado es de longitud miembros del array comenzando con ${parmetro[desplazamiento]} . Un desplazamiento negativo se toma

como relativo al ndice inmediatamente superior al mayor ndice del array especificado. La expansin 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 carcter de la variable especial IFS . Cuando se usa '@' y la expansin 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 expansin aparece encerrada entre comillas dobles, cada clave se expande en una palabra separada.
${#parmetro}

Se sustituye por la longitud en caracteres del valor expandido de parmetro. Si el parmetro es '*' o '@', el valor sustituido es el nmero de parmetros posicionales. Si parmetro es un nombre de array seguido de '* ' o '@', el valor sustituido es el nmero de elementos del array.
${parmetro#palabra} ${parmetro##palabra}

La palabra se expande para producir un patrn al igual que en la expansin de nombres de fichero (vea la Seccin 3.5.8 [Expansin de Nombres de Fichero]). Si el patrn encaja con el principio del valor expandido de parmetro, entonces el resultado de la expansin es el valor expandido de parmetro en el que se elimina el ajuste ms corto al patrn (en el caso de usar '#') o el ajuste ms largo al patrn (en el caso de '##'). Si el parmetro es '@' o '*' la operacin de eliminacin del patrn se aplica a cada parmetro posicional sucesivamente, y la expansin es la lista resultante. Si el parmetro es una variable de tipo array indexada por '@' o '*' la operacin de eliminacin del patrn se
Pgina 30

Capitulo 3: Caractersticas Bsicas del Shell

aplica a cada miembro del array en turnos, y la expansin es la lista resultante.


${parmetro%palabra} ${parmetro%%palabra}

La palabra es expandida para producir un patrn como en la expansin de nombres de fichero. Si el patrn encaja en una porcin final del valor expandido de parmetro, entonces el resultado de la expansin es el valor de parmetro con el ajuste ms corto que concuerde con el patrn (en el caso de '%') o el ajuste ms largo (en el caso de '%%') eliminados. Si el parmetro es '@' o '*' la operacin de eliminacin del patrn se aplica a cada parmetro posicional en turnos y la expansin es la lista resultante. Si el parmetro es una variable de tipo array indexada por '@' o '*', la operacin de eliminacin del patrn se aplica a cada miembro del array secuencialmente, y la expansin es la lista resultante.
${parmetro/patrn/cadena} patrn se expande para producir un patrn como en la expansin de nombres de archivo. parmetro se expande y el ajuste ms largo al patrn de este valor es sustituido por cadena. Si el patrn comienza con '/', todos los ajustes al patrn son reemplazados por cadena. Normalmente slo se reemplaza el primer ajuste. Si el patrn comienza con '#', este debe encajar al principio del valor expandido de parmetro. Si el patrn comienza con '%' este debe ajustar al final del valor expandido de parmetro. Si la cadena es nula

los ajustes al patrn sern eliminados y se puede omitir la '/' posterior al patrn. Si el parmetro es '@' o '* ', la operacin de sustitucin se aplica a cada parmetro posicional por turnos, y la expansin es la lista resultante. Si parmetro es una variable de tipo array indexada con '@' o '*', la operacin de sustitucin se aplica a cada uno de los miembros del array en turnos, y la expansin es la lista resultante.
${parmetro^patrn} ${parmetro^^patrn} ${parmetro,patrn} ${parmetro,,patrn}

Esta expansin modifica las maysculas-minsculas en los caracteres alfabticos de parmetro. patrn se expande para producir un patrn como en la expansin de nombres de fichero. El operador '^' convierte las letras minsculas que encajen con el patrn a letras maysculas; el operador ';' convierte las letras maysculas que ajusten con el patrn a letras minsculas. Las expansiones con '^^' y ',,' convierten cada carcter que encaje en el valor expandido; Las expansiones con '^' y ',' encajan y convierten nicamente el primer carcter en el valor expandido. Si se omite el patrn se considera que este es igual a '?', con el que encaja cualquier carcter. Si el parmetro es '@' o '*' las modificaciones de maysculas y minsculas se aplican a cada carcter posicional en turnos y la expansin es la lista resultante. Si parmetro es una variable de tipo array indexada con '@' o '*', las modificaciones se aplican a cada miembro del array en turnos,
Pgina 31

Capitulo 3: Caractersticas Bsicas del Shell

y la expansin es la lista resultante.

3.5.4.- Sustitucin de Comandos.


La sustitucin de comandos permite que la salida de un comando sustituya al propio comando. La sustitucin de comandos ocurre cuando un comando es encerrado de la siguiente manera:
$(comando)

o
`comando`

Bash realiza la expansin ejecutando el comando y reemplazando la sustitucin del comando con la salida estndar del comando, con cualquier carcter nueva lnea marginal eliminado. Las nuevas lneas embebidas en el interior no son eliminadas, pero pueden ser eliminadas durante la divisin de palabras. La sustitucin del comando $(cat archivo) puede ser reemplazada por su equivalente mucho ms rpido $(< 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 invertida no precedida por una barra invertida termina la sustitucin de comandos. Cuando se usa la forma $(comando), todos los caracteres entre los parntesis forman el comando; ninguno se trata de forma especial. La sustitucin 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 sustitucin aparece entre dobles comillas, no se realiza la separacin de palabras y la expansin de nombres de ficheros en los resultados.

3.5.5.- Expansin Aritmtica


La expansin aritmtica permite la evaluacin de una expresin aritmtica y la sustitucin del resultado. El formato para la expansin aritmtica es:
$(( expresin ))

La expresin se trata como si estuviera encerrada entre dobles comillas, pero unas comillas dobles encerradas entre los parntesis no se tratan de forma especial. Todos los tokens en la expresin sufren expansin de parmetros, sustitucin de comandos y eliminacin del entrecomillado. La expansin aritmtica puede ser anidada. La evaluacin se realiza de acuerdo con las reglas listadas ms abajo (vea la Seccin 6.5 [Aritmtica de la Shell]). Si la expresin es invlida, Bash imprime un mensaje indicando el fallo en la salida de error estndar y no se produce ninguna sustitucin.

3.5.6.- Sustitucin de Procesos.


La sustitucin de procesos est soportada en sistemas que permiten tuberas con nombre (FIFOs) o el mtodo 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


Pgina 32

Capitulo 3: Caractersticas Bsicas del Shell

del tipo '/dev/fd'. El nombre de este archivo se pasa como argumento al comando actual como resultado de la expansin. 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 parntesis izquierdo, de otro modo la construccin se interpretar como una redireccin. Cuando est disponible, la sustitucin de procesos se realiza de forma simultanea con la expansin de parmetros y variables, la sustitucin de comandos y la expansin aritmtica.

3.5.7.- Separacin de palabras


La shell escanea los resultados de la expansin de parmetros, la sustitucin de comandos y la expansin aritmtica que no ocurren entre dobles comillas para separar palabras. La shell trata cada carcter 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><tabulacin><nueva linea>, el valor por defecto, entonces se ignoran las secuencias de <espacio>, <tabulacin> y <nueva linea> al principio y al final de los resultados de las expansiones previas, y cualquier secuencia de caracteres del IFS que no estn situados al principio o al final sirven para delimitar palabras. Si IFS tiene algn otro valor distinto al valor por defecto, las secuencias de los caracteres espacio y tabulacin son ignoradas al principio y al final de la palabra, siempre que el carcter de espacio en blanco est en el valor de IFS (un carcter de espacio en blanco de IFS). Cualquier carcter en IFS que no sea espacio en blanco de IFS, junto con cualquier carcter de espacio en blanco adyacente de IFS , delimita un campo. Una secuencia de caracteres de espacio en blanco de IFS tambin se trata como un delimitador. Si el valor de IFS es nulo, no se realiza la divisin de palabras. Se mantienen los valores explcitamente nulos ( o ''). Los argumentos implcitamente nulos no entrecomillados, resultantes de la expansin de parmetros que no tengan valor, son eliminados. Si se expande un parmetro sin valor dentro de comillas dobles, el argumento nulo resultante se mantiene. Advierta que si no se realiza ninguna expansin tampoco hay separacin de palabras.

3.5.8.- Expansin de Nombres de Fichero.


Tras la separacin de palabras, a menos que se haya establecido la opcin '-f' (vea la Seccin 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 patrn, y reemplazada con una lista alfabticamente ordenada de nombres que se ajustan al patrn. Si no se encuentra ningn nombre concordante con el patrn, y la opcin de shell nullglob est deshabilitada, la palabra permanece sin cambios. Si la opcin nullglob est establecida, y no se encuentran concordancias, la palabra es eliminada. Si la opcin de shell failglob est establecida, y no se encuentran concordancias, se imprime un mensaje de error y el comando no se ejecuta. Si la opcin de shell nocaseglob est establecida, se realiza el ajuste sin tener en cuenta la diferencia entre maysculas y minsculas para los caracteres alfabticos. Cuando se utiliza un patrn para la expansin de nombres de fichero, el carcter '.' al principio del nombre de archivo o inmediatamente despus de una barra inclinada '/' debe concordar siempre de forma explcita, a menos que la opcin dotglob est establecida. Cuando se ajustan nombres de ficheros el carcter barra invertida siempre debe hacerse concordar explcitamente. En otros casos el carcter '.' no se trata de forma especial.
Pgina 33

Capitulo 3: Caractersticas Bsicas del Shell

Vea la descripcin de shopt en la Seccin 4.3.2 [El Comando Interno Shopt] para una descripcin 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 patrn. Si GLOBIGNORE est establecida cada nombre concordante que tambin 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 nulo tiene el efecto de activar la opcin de shell dotglob, de forma que todos los dems nombres de archivo que comiencen con '.' sern concordantes con el patrn. Para obtener el comportamiento anterior de ignorar los nombres de fichero que comiencen con '.', aada el patrn '.*' a los patrones contenidos en GLOBIGNORE. La opcin dotglob se desactiva cuando GLOBIGNORE no est establecido.
3.5.8.1.- Concordancia de Patrones

Cualquier carcter que aparece en un patrn, distinto de los caracteres especiales para patrones descritos ms abajo, concuerda con s mismo. El carcter NUL no puede ocurrir en un patrn. Una barra invertida escapa al carcter 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 opcin de shell globstar est activada, y se utiliza el '*' en un contexto de expansin de nombre de ficheros, dos '*' adyacentes se usan como un nico patrn que concuerda con todos los archivos y cero o ms directorios y subdirectorios. Si estn seguidos por un '/', dos '*' adyacentes concordarn slo con directorios y subdirectorios. Concuerda con cualquier carcter individual. Concuerda con cualquiera de los caracteres encerrados. Un par de caracteres separados por un guin '-' indican una expresin de rango; cualquier carcter que por orden se site entre esos dos caracteres, usando la secuencia de ordenacin de la localizacin actual y su juego de caracteres, incluyendo a ambos, concuerda con la expresin. Si el primer carcter que sigue al '[' es un '!' o un '^'entonces concuerda con cualquier carcter no encerrado entre los corchetes. Un '_' puede concordar incluyndolo como el primer o el ltimo carcter en el conjunto de caracteres incluido. Un ']' puede ser concordante incluyndolo como el primer carcter en el conjunto. El orden de ordenacin de los caracteres en las expresiones de rango se determina mediante la localizacin actual y el valor de la variable de shell LC_COLLATE , si est establecida. Por ejemplo en la localizacin 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]'; podra ser equivalente a, por ejemplo, '[aBbCcDdxXyYz]'. Para obtener la interpretacin tradicional de los rangos en expresiones entre corchetes, se puede forzar a utilizar la localizacin de C
Pgina 34

? []

Capitulo 3: Caractersticas Bsicas del Shell

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 estndar POSIX:
alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit

Una clase de caracteres concuerda con cualquier carcter que forme parte de esa clase. La clase word concuerda con letras, dgitos y el carcter '_'. Se puede especificar una clase de equivalencia encerrada entre '[' y ']' utilizando la sintaxis [=c=], la cual concuerda con cualquier carcter con el mismo peso de clasificacin (como se define por la localizacin actual) que el carcter c Entre '[' y ']' la sintaxis [.smbolo.] concuerda con el smbolo de clasificacin smbolo. Si la opcin de shell extglob est activada usando el comando interno shopt, se reconocern varios operadores de patrones extendidos. En la descripcin siguiente, una lista-patrones es una lista de uno o ms patrones separados por un '|'. Se pueden formar patrones compuestos usando uno o ms de los siguientes sub-patrones:
?(lista-patrones)

Concuerda con cero o una ocurrencia de los patrones dados.


*(lista-patrones)

Concuerda con cero o ms ocurrencias de los patrones dados


+(lista-patrones)

Concuerda con una o ms 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.- Eliminacin 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.- Redirecciones
Antes de que un comando sea ejecutado, su entrada y su salida pueden ser redireccionadas usando una notacin especial interpretada por la shell. La redireccin tambin se puede utilizar para abrir y cerrar archivos por el entorno de ejecucin actual de la shell. Los siguientes operadores de redireccin 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 redireccin puede ser precedida por un nmero de descriptor de fichero o puede estar precedida por una palabra de la forma {nombre_de_variable} . En este caso, para cada operador redireccin exceptuando >&- y <&-, la shell asignar un descriptor de fichero mayor de 10 y asignar este a {nombre_de_variable} . Si >&- o <&- estn precedidos de {nombre_de_variable} , el valor
Pgina 35

Capitulo 3: Caractersticas Bsicas del Shell

de nombre_de_variable define el descriptor a cerrar. En las descripciones siguientes, si se omite el nmero de descriptor de fichero, y el primer carcter del operador de redireccin es '<', la redireccin hace referencia a la entrada estndar (descriptor de archivo 0). Si el primer carcter del operador de redireccin es '>', la redireccin hace referencia al la salida estndar (descriptor de archivo 1). La palabra que sigue al operador de redireccin en las descripciones siguientes, salvo que se especifique lo contrario, est sujeta a expansin de llaves, expansin de tildes, expansin de parmetros, sustitucin de comandos, expansin aritmtica, eliminacin de entrecomillado, expansin de nombres de fichero, y separacin de palabras. Si esta se expande a ms de una palabra, Bash informa de un error. Advierta que el orden de las redirecciones es importante. Por ejemplo, el comando
ls > listadir 2>&1

direcciona tanto la salida estndar (descriptor de fichero 1) y la salida de error estndar (descriptor de fichero 2) al archivo listadir, mientras que el comando
ls 2>1& > listadir

direcciona nicamente la salida estndar al archivo listadir, ya que el error estndar se hizo una copia de la salida estndar antes de que la salida estndar fuera redireccionada a listadir. Bash maneja varios nombres de fichero especialmente cuando se utilizan en redirecciones, como se describe en la tabla siguiente: /dev/fd/fd Si fd es un entero vlido, el descriptor de fichero fd es duplicado /dev/stdin Se duplica el descriptor de fichero 0 /dev/stdout Se duplica el descriptor de fichero 1 /dev/stderr Se duplica el descriptor de fichero 2 /dev/tcp/host/puerto Si host es un nombre de anfitrin vlido o una direccin de internet y puerto es un nmero de puerto de tipo entero o un nombre de servicio, Bash intenta abrir una conexin TCP al socket correspondiente. /dev/udp/host/puerto Si host es un nombre de anfitrin vlido o una direccin de internet y puerto es un nmero de puerto de tipo entero o un nombre de servicio, Bash intenta abrir una conexin UDP al socket correspondiente. Un error al abrir o crear un archivo provoca que la redireccin 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.

Pgina 36

Capitulo 3: Caractersticas Bsicas del Shell

3.6.1.- Redireccionando la entrada


La redireccin de la entrada provoca que el archivo cuyo nombre resulta de la expansin de palabra sea abierto para lectura en un descriptor de fichero n, o la entrada estndar (descriptor de fichero 0) si no se especifica el valor de n. El formato general para la redireccin de la entrada es:
[n]<palabra

3.6.2.- Redireccionando la salida


La redireccin de la salida produce que el archivo cuyo nombre resulta de la expansin de palabra sea abierto para escritura en el descriptor de fichero n, o la salida estndar (descriptor de fichero 1) si no se especifica n. Si el fichero no existe se crea; si existe se trunca a tamao cero. El formato general para redireccionar la salida es:
[n]>[|]palabra

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

3.6.3.- Anexando la salida redirigida


La redireccin de la salida llevada a cabo de esta forma causa que el archivo cuyo nombre resulta de la expansin de la palabra se abra para anexar (aadir) en el descriptor de fichero n, o la salida estndar (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 Estndar y la Salida de Error Estndar


Esta construccin permite que tanto la salida estndar (descriptor de fichero 1) como la salida de error estndar (descriptor de fichero 2) sean redireccionadas al archivo cuyo nombre es la expansin de palabra. Hay dos formatos para redireccionar la salida estndar y la salida de error estndar:
&>palabra

y
>&palabra

De las dos formas, es preferible la primera. Esto equivale semnticamente a


>palabra 2>&1

3.6.5.- Anexando la Salida Estndar y la Salida de Error Estndar.


Esta construccin permite que tanto la salida estndar (descriptor de fichero 1) como la salida de error estndar (descriptor de fichero 2) se anexen al archivo cuyo nombre es la expansin de palabra. El formato para anexar la salida estndar y la salida de error estndar es:

Pgina 37

Capitulo 3: Caractersticas Bsicas del Shell

&>>palabra

Esto es semnticamente equivalente a


>>palabra 2>&1

3.6.6.- Documentos Internos (Here Documents)


Este tipo de redireccin ordena a la shell leer la entrada desde la fuente actual hasta encontrar una lnea que contenga nicamente a palabra (sin espacios en blanco en los mrgenes). Todas las lineas ledas hasta ese punto son luego usadas como entrada estndar para un comando. El formato es:
<<[-]palabra documento-interno delimitador En palabra no se realiza la expansin de parmetros, la sustitucin de comandos, la expansin aritmtica o la expansin de nombres de fichero. Si algunos caracteres en palabra estn entrecomillados, el delimitador es el resultado de la eliminacin de entrecomillado en palabra, y no se expanden las lneas en el documento interno. Si palabra no est entrecomillada, todas las lneas del

documento interno son sometidas a expansin de parmetros, sustitucin de comandos y expansin aritmtica. 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 redireccin es '<<-' entonces se eliminan todos los caracteres de tabulacin marginales de las lneas de entrada y de la lnea 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 estndar.

3.6.8.- Duplicando Descriptores de Fichero


El operador de redireccin
[n]<&palabra

se utiliza para duplicar descriptores de fichero de entrada. Si palabra se expande a uno o ms dgitos, el descriptor de fichero denotado por n es hecho una copia de ese descriptor de fichero. Si los dgitos en palabra no especifican un descriptor de fichero abierto para entrada, se produce un error de redireccin. Si palabra se evala a '-' se cierra el descriptor de fichero n. Si no se especifica el valor n se utiliza la entrada estndar (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 estndar (descriptor de fichero 1). Si los dgitos en palabra no especifican un descriptor de fichero abierto para salida, se produce un error de redireccin. Como caso especial, si se omite n y palabra no se expande a uno o ms dgitos, la salida estndar y el error estndar son
Pgina 38

Capitulo 3: Caractersticas Bsicas del Shell

redireccionados como se describi anteriormente.

3.6.9.- Moviendo Descriptores de Fichero


El operador de redireccin
[n]<&dgito-

mueve el descriptor de fichero dgito al descriptor de fichero n, o la entrada estndar (descriptor de fichero 0) si no se especifica el valor de n. Dgito es cerrado despus de haber sido duplicado a n. De forma similar el operador de redireccin
[n]>&dgito-

mueve el descriptor de fichero dgito al descriptor de fichero n, o la salida estndar (descriptor de fichero 1) si no se especifica n.

3.6.10.- Abriendo descriptores de fichero para lectura y escritura


El operador de redireccin
[n]<>palabra

causa que el archivo cuyo nombre es la expansin 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.- Expansin de un comando simple
Cuando 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 Seccin 3.5 [Expansiones de la Shell]). Si queda alguna palabra tras la expansin, 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 Seccin 3.6 [Redirecciones]). 4. El texto despus del '=' en cada asignacin de variable sufre expansin de tilde, expansin de parmetros, sustitucin de comandos, expansin aritmtica y eliminacin de entrecomillado antes de ser asignado a la variable. Si no se obtiene ningn nombre de comando, la asignacin de variables afectar al entorno actual de la shell. En caso contrario, las variables se aaden 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 slo lectura se produce un error y el comando termina con un estado distinto de cero. Si no se obtiene ningn nombre de comando, se llevan a cabo las redirecciones, pero no afectan al entorno actual de la shell. Un error de redireccin provoca que el comando finalice con un estado distinto de cero. Si queda algn nombre de comando tras la expansin, se procede a su ejecucin como se describe ms abajo. En caso contrario el comando finaliza. Si una de las expansiones contenan una
Pgina 39

Capitulo 3: Caractersticas Bsicas del Shell

sustitucin de comandos, el estado de salida del comando es el estado de salida de la ltima sustitucin de comandos realizada. Si no hubo sustitucin de comandos, el comando finaliza con un estado igual a cero.

3.7.2.- Bsqueda y Ejecucin de Comandos


Despus 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 funcin de shell con ese nombre se invoca a dicha funcin como se describe en la Seccin 3.3 [Funciones de Shell]. 2. Si el nombre no encaja con ninguna funcin, 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 funcin de shell ni un comando interno y no contiene barras inclinadas, Bash busca en cada elemento de $PATH un directorio conteniendo un archivo ejecutable con ese nombre. Bash usa una tabla hash para recordar la ruta completa de los archivos ejecutables para evitar mltiples bsquedas en el PATH (vea la descripcin de hash en la Seccin 4.1 [Comandos Internos de la Shell]). Se realiza una bsqueda completa de los directorios incluidos en el $PATH nicamente si el comando no se encuentra en la tabla hash. Si la bsqueda es infructuosa, la shell busca una funcin de shell denominada command_not_found_handle. Si esta funcin existe se le invoca con el comando original y los argumentos originales del comando como sus argumentos, y el estado de salida de la funcin se convierte en el estado de salida de la shell. Si esa funcin no est definida la shell imprime un mensaje de error y devuelve un estado de salida igual a 127. 4. Si la bsqueda es exitosa o si el nombre del comando contiene una o ms barras invertidas, la shell ejecuta el nombre de programa en un entorno de ejecucin separado. El argumento 0 se asigna al nombre dado, y el resto de argumentos del comando se asignan a los argumentos que se le suministran, si los hay. 5. Si esta ejecucin 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 guin de shell y la shell lo ejecuta como se describe en la Seccin 3.8 [Guiones de Shell]. 6. Si el comando no fue iniciado de forma asncrona, la shell espera a que el comando finalice y recoge su estado de salida.

3.7.3.- Entorno de Ejecucin de Comandos


La shell tiene un entorno de ejecucin que consiste en lo siguiente: Los archivos abiertos heredados por la shell en la invocacin 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 invocacin. La mscara del modo de creacin de ficheros como se estableci con umask o se hered desde el padre de la shell. Las trampas actuales establecidas mediante trap. Los parmetros de la shell que son establecidos mediante la asignacin de variables, con set
Pgina 40

Capitulo 3: Caractersticas Bsicas del Shell

o heredados en el entorno desde el padre de la shell. Las funciones de la shell definidas durante la ejecucin o heredadas en el entorno desde el padre de la shell. Las opciones activadas en la invocacin (bien por defecto o con argumentos en la lnea de comandos) o mediante set. Las opciones activadas con shopt (vea la Seccin 4.3.2 [El comando Interno Shopt]) Los alias de shell definidos mediante alias (vea la Seccin 6.6 [Alias]) Varios Ids de proceso, incluidos los de las tareas en segundo plano (vea la Seccin 3.2.3 [Listas]), el valor de $$ y el valor de $PPID. Cuando un comando nico distinto de un comando interno o una funcin de shell va a ser ejecutado, este se invoca en un entorno de ejecucin 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, ms cualquier modificacin y adicin al comando especificada mediante redirecciones. El directorio de trabajo actual. La mscara de modo de creacin 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 Seccin 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 ejecucin de la shell. La sustitucin de comandos, los comandos agrupados con parntesis y los comandos asncronos 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 invocacin. Los comandos internos que se invocan como parte de una tubera tambin se ejecutan en un entorno de subshell. Los cambios hechos al entorno de la subshell no puede afectar a entorno de ejecucin de la shell. Las subshells engendradas para ejecutar la sustitucin de comandos heredan el valor de la opcin '-e' desde la shell padre. Cuando no se encuentra en modo POSIX, Bash limpia la opcin 'e' en dichas subshells. Si un comando es seguido por un '&' y el control de tareas no est activo, la entrada estndar por defecto para el comando es el archivo vaco '/dev/null'. En caso contrario, el comando invocado hereda los descriptores de fichero de la shell invocante con las modificaciones realizadas por las redirecciones.

3.7.4.- Entorno
Cuando se invoca un programa se le proporciona un array de cadenas llamado el entorno. Esto es una lista de pares nombre-valor, de la forma nombre=valor. Bash proporciona varias maneras de manipular el entorno. En la invocacin, la shell escanea su propio entorno y crea un parmetro para cada nombre que encuentra, marcndolo automticamente para exportarlo a los procesos hijo. Los comandos ejecutados heredan el entorno. Los comandos export y 'declare -x' permiten que los parmetros y funciones sean aadidos o eliminados del
Pgina 41

Capitulo 3: Caractersticas Bsicas del Shell

entorno. Si se modifica el valor de un parmetro 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', ms cualquier adicin mediante los comandos export y 'declare -x'. Se puede incrementar temporalmente el entorno para un comando nico o una funcin anteponiendole asignaciones de parmetros, como se describe en la Seccin 3.4 [Parmetros de Shell]. Estas sentencias de asignacin afectan nicamente al entorno visto por ese comando. Si la opcin '-k' est establecida (vea la Seccin 4.3.1 [El Comando Interno Set]), entonces todas las asignaciones de parmetros se emplazan en el entorno para el comando, no slo las que preceden al nombre del comando. Cuando Bash invoca un comando externo, la variable '$_ ' se asigna al nombre de ruta completo del comando y se pasa a dicho comando en su entorno.

3.7.5.- Estados de Salida


El estado de salida de un comando ejecutado es el valor retornado por la llamada al sistema waitpd o alguna funcin equivalente. Los estados de salida tienen valores entre 0 y 255, aunque, como se explica ms 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 estn tambin limitados a este rango. Bajo ciertas circunstancias, la shell puede usar valores especiales para indicar modos de fallo especficos. Para los propsitos 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 seal de error fatal cuyo nmero 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 expansin o la redireccin el estado de salida es mayor que cero. El estado de salida es usado por los comandos condicionales de Bash (vea la Seccin 3.2.4.2 [Construcciones Condicionales) y algunas de las construcciones de listas (vea la Seccin 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.- Seales
Cuando Bash es interactivo, en ausencia de cualquier trampa, este ignora SIGTERM ( de forma que 'kill 0' no destruye a las shells interactivas), y SIGINT es capturada y manejada (de forma que el comando interno wait es interrumpible). Cuando Bash recibe una SIGINT, este detiene cualquier bucle en ejecucin. En todos los casos Bash ignora SIGQUIT. Si el control de tareas est habilitado (vea el Captulo 7 [Control de Tareas] Bash ignora SIGTTIN, SIGTTOU y SIGTSTP.
Pgina 42

Capitulo 3: Caractersticas Bsicas del Shell

Los comandos no internos iniciados por Bash tienen manejadores de seales establecidos a los valores heredados por la shell desde su padre. Cuando el control de tareas no est activado, los comandos asncronos ignoran SIGINT y SIGQUIT en adicin a esos manejadores heredados. Los comandos se ejecutan como resultado de una sustitucin de comandos ignoran las seales 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 reenva el SIGHUP a todas sus tareas, tanto suspendidas como en ejecucin. Se enva SIGCONT a las tareas suspendidas para asegurarse de que reciben la seal SIGHUP. Para prevenir que la shell enve la seal SIGHUP a una tarea en particular esta debera ser eliminada de la tabla de tareas con el comando interno disown (vea la Seccin 7.2 [Comandos Internos para el Control de Tareas] o marcada para que no reciba SIGHUP usando 'disown -h'. Si la opcin de shell huponexit ha sido establecida con shopt (vea la Seccin 4.3.2 [El Comando Interno Shopt]) Bash enva un SIGHUP a todas las tareas cuando una shell de inicio de sesin interactiva finaliza. Si Bash est esperando a que un comando finalice y recibe una seal para la cual tiene establecida una trampa, la trampa no se ejecutar hasta que el comando finalice. Cuando Bash est esperando a un comando asncrono mediante el comando interno wait, la recepcin de una seal para la cual tiene establecida una trampa provoca que el comando interno wait finalice inmediatamente con un estado de salida mayor que 128, justo despus de la ejecucin de la trampa.

3.8.- Guiones de Shell


Un guin de shell es un archivo de texto que contiene comandos de shell. Cuando se usa este tipo de fichero como el primer argumento no opcin en la invocacin de Bash y no se suministran ni la opcin '-c' ni la '-s' (vea la Seccin 6.1 [Invocando a Bash]), Bash lee y ejecuta comandos del fichero y luego finaliza. Este modo de operacin crea una shell no interactiva. La shell busca primero el fichero en el directorio actual y despus en los directorios de $PATH si no lo encuentra all. Cuando Bash ejecuta un guin de shell, este establece el parmetro 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 parmetros posicionales. Si no se proporcionan argumentos adicionales, se desactivan los parmetros posicionales. Un guin de shell se puede convertir en ejecutable usando el comando chmod para activar el bit de ejecucin. 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 ejecutar
bash nombre_de_archivo argumentos

Si el nombre_de_archivo es un guin 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 guin, con la excepcin de que las localizaciones de comandos recordadas por el padre (vea la descripcin de hash en la Seccin 4.1 [Comandos Internos de la Shell Bourne]) se mantienen en el hijo.
Pgina 43

Capitulo 3: Caractersticas Bsicas del Shell

La mayora de las versiones de Unix hacen de esto una parte del mecanismo de ejecucin de comandos del sistema operativo. Si la primera lnea de un guin comienza con los caracteres '#!', el resto de la lnea especifica un intrprete para el programa. Esto es, usted puede especificar Bash, awk, Perl o algn otro intrprete y escribir el resto del guin en ese lenguaje. Los argumentos para el interprete consisten en un nico argumento opcional a continuacin del nombre del interprete en la primera lnea del archivo del guin, seguido por el nombre del archivo de guin, seguido por el resto de los argumentos. Bash realizar esta accin en sistemas operativos que no manejan esto por s mismos. Advierta que algunas versiones antiguas de Unix limitan el nombre del intrprete y los argumentos a un mximo 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 se usar Bash para interpretar el guin, incluso si es lanzado bajo cualquier otra shell.

Pgina 44

Captulo 4: Comandos Internos de la Shell

4.- Comandos Internos de la Shell


Los comandos internos estn 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 Seccin 3.2.1 [Comandos nicos]), la shell ejecuta el comando directamente, sin invocar a ningn otro programa. Los comandos internos son necesarios para implementar funcionalidades que son imposibles o poco prcticas de obtener con utilidades separadas. Esta seccin 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 captulos: comandos internos que proporcionan la interfaz de Bash para las caractersticas de control de tareas (vea la Seccin 7.2 [Comandos Internos para el Control de Tareas]), la pila de directorios (vea la Seccin 6.8.1 [Comandos Internos para la Pila de Directorios]), la historia de comandos (vea la Seccin 9.2 [Comandos Internos para la Historia de Comandos]) y las caractersticas de completado programable (vea la Seccin 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 opcin invlida y requieren el uso de '--' para prevenir tal interpretacin.

4.1.- Comandos Internos de la Shell Bourne


Esta seccin describe los comandos internos que son heredados de la Shell Bourne. Estos comandos se implementan como se especifica por el estndar POSIX.
: (dos puntos) :[argumentos]

No hace nada ms 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 parmetros posicionales cuando se ejecuta nombre_de_archivo. En caso contrario los parmetros

posicionales no son alterados. El estado de retorno es el estado de salida del ltimo comando ejecutado, o cero si no se ejecut ningn comando. Si no se encuentra nombre_de_archivo o no se puede leer, el estado de retorno es distinto de cero. Este comando interno es equivalente a source.
Pgina 45

Captulo 4: Comandos Internos de la Shell

break break[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.
cd cd [-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 bsqueda. Si directorio comienza con una barra invertida no se utiliza CDPATH. La opcin '-P' significa que no se deben seguir a los enlaces simblicos; Los enlaces simblicos se siguen por defecto o si se utiliza la opcin '-L'. Si el directorio es '-', esto equivale a $OLDPWD. Si se utiliza un nombre de directorio no vaco procedente de CDPATH o si '-' es el primer argumento y el cambio de directorio se realiza con xito, se escribe en la salida estndar 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.
continue continue [n]

Reanuda la siguiente iteracin de un bucle for, while, until o select. Si se suministra n, se reanuda la ejecucin 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.
eval eval [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 slo se proporcionan argumentos vacos, el estado de retorno es cero.


exec exec [-cl] [-a nombre] [comando [argumentos]] Si se suministra comando, este reemplaza la shell sin crear un nuevo proceso. Si se

suministra la opcin '-l' la shell pone un guin al comienzo del argumento nmero 0 que se pasa al comando. Esto es lo que hace el programa de inicio de sesin. La opcin '-c' produce que el comando se ejecute en un entorno vaco. Si se suministra '-a' la shell pasa el nombre como el argumento 0 del comando. Si no se especifica ningn comando se pueden usar las redirecciones para afectar al entorno de shell actual. Si no hay errores de redireccin, el estado de retorno es cero; en caso contrario el estado de retorno es distinto de cero.
exit exit [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
Pgina 46

Captulo 4: Comandos Internos de la Shell

en EXIT se ejecuta antes de que la shell finalice.


export export [-fn] [-p] [nombre[=valor]] Marca cada nombre para pasarlo a los procesos hijos en el entorno. Si se suministra la opcin '-f', los nombres se refieren a funciones de shell; en caso contrario los nombres se refieren a variables de shell. La opcin '-n' significa que se debe dejar de marcar cada nombre dado para exportar. Si no se suministran nombres o si se pasa la opcin 'p', se muestra una lista de nombres exportados. La opcin '-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 opcin invlida, que alguno de los nombres no sea un nombre de variable de shell vlida o que se proporcione la opcin '-f' con un nombre que no sea una funcin de shell.
getopts getopts cadena_de_opciones nombre [args] getopts se utiliza en los guiones de shell para analizar los parmetros posicionales. La cadena_de_opciones contiene los caracteres de opcin que deben ser reconocidos; si un

carcter es seguido por un signo de dos puntos, se espera que la opcin tenga un argumento, el cual debe estar separado de esta por un espacio. El dos puntos (':') y la interrogacin de cierre ('?') no se pueden usar como caracteres de opcin. Cada vez que se invoca, getopts sita la siguiente opcin 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 guin de shell. Cuando una opcin requiere un argumento, getopts sita ese argumento en la variable OPTARG. La shell no reinicia OPTIND automticamente; este se debe reiniciar manualmente entre las mltiples llamadas a getopts dentro de la misma invocacin de shell si se va a usar un nuevo juego de parmetros. 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 opcin y nombre se ajusta a '?'.
getopts normalmente analiza los parmetros posicionales, pero si se dan ms argumentos en args, getopts analiza estos en su lugar. getopts puede informar de errores de dos formas. Si el primer carcter 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 diagnstico cuando se encuentran opciones invlidas o faltan argumentos de opcin Si la variable OPTERR est establecida a 0, no se mostraran mensajes de error, incluso si el primer carcter de cadena_de_opciones no es un dos puntos. Si se encuentra una opcin invlida, getopts sita '?' en nombre y, si no es silencioso, imprime un mensaje de error y OPTARG se anula. Si getopts es silencioso, el carcter de opcin encontrado se sita en OPTARG y no se imprime ningn mensaje de diagnstico.
Pgina 47

Captulo 4: Comandos Internos de la Shell

Si no se encuentra un argumento obligatorio, y getopts no es silencioso, se sita una marca de interrogacin de cierre ('?') en nombre, se elimina OPTARG, y se imprime un mensaje de diagnstico. Si getopts es silencioso, entonces se sita un dos puntos (':') en nombre y OPTARG toma al carcter de opcin encontrado.
hash hash [-r] [-p nombre_de_archivo] [-dt] [nombre]

Recuerda las rutas completas de los comandos especificados como argumentos nombre, de forma que estos no necesitan buscarse en las siguientes invocaciones. Los comandos se encuentran buscando a travs de los directorios listados en $PATH. La opcin '-p' inhibe la bsqueda de rutas, y se utiliza nombre_de_archivo como la localizacin de nombre. La opcin '-r' produce que la shell olvide todas las localizaciones registradas. La opcin '-d' produce que la shell olvide las rutas registradas para cada nombre. Si se suministra la opcin '-t' se imprime la ruta completa correspondiente a cada nombre. Si se proporcionan mltiples argumentos nombre con la opcin '-t' el nombre se imprime antes de las rutas completas. La opcin '-l' produce que la salida sea mostrada en un formato que pueda ser reutilizado como entrada. Si no se dan argumentos o si slo se suministra '-l' se imprime la informacin sobre los comandos registrados. El estado de retorno es cero a menos que no se encuentre a nombre o se suministre una opcin invlida.
pwd pwd [-LP]

Imprime la ruta absoluta del directorio de trabajo actual. Si se proporciona la opcin '-P' la ruta imprimida no contendr enlaces simblicos. Si se suministra la opcin '-L', la ruta imprimida puede contener enlaces simblicos. 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 opcin invlida.
readonly readonly [-aApf] [nombre[=valor]] Marca cada nombre como de slo lectura. Los valores de estos nombres no pueden ser modificados en posteriores asignaciones. Si se proporciona la opcin '-f' los nombres se refieren a funciones de shell. La opcin '-a' significa que cada nombre se refiere a una variable de tipo array indexado; la opcin '-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 opcin '-p', se imprime la lista de todos los nombres de slo lectura. La opcin '-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 opcin invlida o que uno de los argumentos nombre no sea un nombre de variable o funcin de shell vlidos, o que se proporcione la opcin '-f' con un nombre que no es una funcin

de shell.

Pgina 48

Captulo 4: Comandos Internos de la Shell

return return [n]

Produce que una funcin 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 funcin. Esto tambin se puede utilizar para terminar la ejecucin de un guin 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 guin como estado de salida del guin de comandos. Cualquier comando asociado con la trampa RETURN se ejecuta antes de que la ejecucin contine tras la funcin o el guin de comandos. El estado de retorno es distinto de cero si return se utiliza fuera de una funcin y no estamos ejecutando un guin de comandos con . o source.
shift shift [n]

Desplaza los parmetros posicionales a la izquierda en n posiciones. Los parmetros posicionales desde n+1 $# son renombrados a $1 $#-n. Los parmetros representados por los nmeros $# hasta $# -n+1 se anulan. n debe ser un nmero no negativo menor o igual a $#. Si n es cero o mayor que $# , los parmetros 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 ]

Evala una expresin condicional expr. Cada operador y operando debe ser un argumento separado. Las expresiones son composiciones de las expresiones primarias descritas ms abajo en la Seccin 6.4 [Expresiones Condicionales de Bash]. test no acepta ninguna opcin y tampoco acepta un argumento '--' como seal 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 evaluacin depende del nmero de argumentos; vase ms abajo.
! expr

Devuelve verdadero (true) si expr es falso (false)


( expr )

Devuelve el valor de expr. Esto se puede utilizar para anular la precedencia normal de los operadores.
expr1 -a expr2

Devuelve verdadero si tanto expr1 como expr2 son verdaderos.

Pgina 49

Captulo 4: Comandos Internos de la Shell

expr1 -o expr2

Devuelve verdadero si expr1 o expr2 son verdaderos. Los comandos internos test y [ evalan expresiones condicionales usando un juego de reglas basado en el nmero de argumentos. 0 argumentos La expresin es falsa 1 argumento La expresin es verdadera si y slo si el argumento no es nulo. 2 argumentos Si el primer argumento es '!', la expresin es verdadera si y slo si el segundo argumento es nulo. Si el primer argumento es alguno de los operadores condicionales unarios (vea la Seccin 6.4 [Expresiones Condicionales de Bash]), la expresin es verdadera si el test unario es verdadero. Si el primer argumento no es un operador unario vlido, la expresin es falsa. 3 argumentos Si el segundo argumento es uno de los operadores condicionales binarios (vea la Seccin 6.4 [Expresiones Condicionales de Bash]), el resultado de la expresin es el resultado de el test binario usando el primer y el tercer argumento como operandos. Los operadores '-a' y '-o' son considerados operadores binarios cuando hay tres argumentos. Si el primer argumento es '!' el valor es la negacin 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 expresin es falsa. 4 argumentos Si el primer argumento es '!' el resultado es la negacin de la expresin de tres argumentos compuesta del resto de argumentos. En caso contrario, la expresin es analizada y evaluada de acuerdo con la precedencia usando las reglas listadas anteriormente. 5 o ms argumentos La expresin es analizada y evaluada de acuerdo a la precedencia usando las reglas listadas anteriormente.
times times

Imprime el tiempo de usuario y de sistema usado por la shell y sus hijos. El estado de retorno es cero.
trap trap [-lp] [arg] [sigspec ]

Los comandos en arg son leidos y ejecutados cuando la shell recibe la seal sigspec. Si arg est ausente (y hay un nico sigspec) o es igual a '-', cada disposicin de seal
Pgina 50

Captulo 4: Comandos Internos de la Shell

especificada es reiniciada a los valores que tena cuando la shell fue iniciada. Si arg es la cadena nula, la seal especificada por cada sigspec es ignorada por la shell y los comandos que esta invoca. Si arg no est presente y se ha suministrado la opcin '-p', la shell muestra los comandos de la trampa asociada con cada sigspec. Si no se suministran argumentos, o slo se pasa la opcin '-p', trap imprime la lista de comandos asociados con cada nmero de seal en un formato que puede ser reutilizado como entrada. La opcin '-l' causa que la shell imprima una lista de nombres de seal y sus correspondientes nmeros. Cada sigspec es o bien un nombre de seal o un nmero de seal. Los nombres de seal son insensibles a maysculas y minsculas 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 aritmticos, y antes de que se ejecute el primer comando en una funcin de shell. Le remitimos a la descripcin de la opcin extdebug para el comando interno shopt (vea la Seccin 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 funcin de shell o un guin de comandos ejecutado con los comandos internos . o source finalice su ejecucin. 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 opcin errexit. Las seales ignoradas tras entrar en la shell no pueden ser atrapadas o reiniciadas. Las seales capturadas que no estn 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 algn sigspec no especifique una seal vlida.
umask umask [-p] [-S] [modo]

Pone la mascara de creacin de archivos de los procesos de shell a modo. Si modo comienza con un dgito, se interpreta como un nmero octal; si no se interpreta como un modo de mscara simblica similar a la aceptada por el comando chmod. Si se omite modo se imprime el valor actual de la mscara. Si se suministra la opcin '-S' sin un argumento modo la mscara se imprime en formato simblico. Si se suministra la opcin '-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 nmero octal, cada nmero de umask se resta de 7. Esto es, un valor de umask de 022 otorga los permisos 755.
Pgina 51

Captulo 4: Comandos Internos de la Shell

unset unset [-fv] [nombre]

Elimina cada variable o funcin nombre. Si no se suministran opciones o se suministra la opcin '-v' cada nombre se refiere a una variable de shell. Si se da la opcin '-f' los nombres se refieren a funciones de shell y se elimina la definicin de la funcin. Las variables y funciones de slo lectura no pueden ser eliminadas. El estado de retorno es cero a menos que alguno de los nombres sea de slo lectura.

4.2.- Comandos Internos de Bash


Esta seccin describe los comandos internos que son nicos o han sido extendidos en Bash. Algunos de estos comandos son especificados en el estandar POSIX.
alias alias [-p] [nombre[=valor] ]

Sin argumentos o con la opcin '-p', alias imprime la lista de alias en la salida estndar 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 ningn valor, se imprime el nombre y el valor del alias. Los alias se describen en la seccin 6.6 [Alias]
bind bind bind bind bind bind bind [-m mapaTeclas] [-lpsvPSV] [-m mapaTeclas] [-q funcion] [-u funcion][-r secTeclas] [-m mapaTeclas] -f nombre_de_archivo [-m mapaTeclas] -x secTeclas:comando-shell [-m mapaTeclas] secTeclas:nombre_funcion comando-Readline

Muestra las asociaciones de teclas y funciones de Readline (vea el Captulo 8 [Edicin de la Lnea de Comandos]), asocia una secuencia de teclas a una funcin de Readline o a una macro, o establece una variable de Readline. Cada argumento no opcin es un comando como podra aparecer en un archivo de inicializacin de Readline (vea la Seccin 8.3 [Archivo de inicializacin de Readline]), pero cada asociacin o comando debe ser pasado como un argumento separado; por ejemplo, '\C-x\C-r:re-readinit-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 emacsstandard.

-l

Lista los nombres de todas las funciones de Readline

Pgina 52

Captulo 4: Comandos Internos de la Shell

-p

Muestra los nombres de las funciones de Readline y las asociaciones de tal forma que se puedan utilizar como entrada en un archivo de inicializacin de Readline. Muestra la lista actual de nombres de funciones de Readline y de asociaciones. Muestra los nombres de variables de Readline y sus valores de tal forma que pueden ser usados como entrada o en un archivo de inicializacin de la Readline. Lista los nombres de las variables actuales de Readline y sus valores. 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 inicializacin de Readline. Muestra las secuencias de teclas de Readline asociadas a macros y las cadenas que estas devuelven. Lee las asociaciones de teclas a partir de nombre_de_fichero.

-P -v

-V -s

-S

-f nombre_de_archivo -q funcin

Consulta las teclas que invocan a la funcin pasada como argumento.


-u funcin

Desasocia todas las teclas enlazadas con la funcin


-r secTeclas

Elimina cualquier asociacin 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 localizacin actual del punto de insercin. Si el comando ejecutado cambia el valor de READLINE_LINE o READLINE_POINT, los nuevos valores se vern reflejados en el estado de edicin. El estado de retorno es cero a menos que se suministre una opcin invlida o que ocurra un error.
builtin builtin [comando-interno [args]] Ejecuta un comando interno de la shell, le pasa args y devuelve su estado de salida. Esto

es til cuando se define una funcin de shell con el mismo nombre que un comando interno, manteniendo la funcionalidad del comando interno dentro de la funcin. El
Pgina 53

Captulo 4: Comandos Internos de la Shell

estado de retorno es distinto de cero si el comando comando-interno no es un comando interno de la shell.


caller caller [expr]

Devuelve el contexto de cualquier llamada a subrutina activa (una funcin de shell o un guin ejecutado con los comandos internos . o source). Sin expr, caller muestra el nmero de lnea y el nombre de archivo fuente de la llamada a subrutina actual. Si se suministra un entero no negativo como expr, caller muestra el nmero de lnea, el nombre de subrutina y el archivo fuente correspondiente a esa posicin de la pila de llamadas de ejecucin actual. Esta informacin 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 posicin vlida de la pila de llamadas.
command command [-pVv] comando [argumentos ] Ejecuta comando con argumentos ignorando cualquier funcin llamada comando. Slo

se ejecutan los comandos internos de la shell o los comandos localizados buscando en el PATH. Si hay una funcin de shell llamada ls, ejecutar 'command ls' dentro de la funcin ejecutar el comando externo ls en vez de llamar a la funcin recursivamente. La opcin '-p' significa que se debe usar el valor por defecto de PATH, el cual garantiza encontrar todas las utilidades estndares. El estado de retorno en este caso es 127 si no se puede encontrar el comando u ocurre algn error y el estado de salida de comando en otro caso. Si se suministra la opcin '-v' o la opcin '-V', se imprime una descripcin de comando. La opcin '-v' produce que se muestre una nica palabra indicando el comando o nombre de archivo usado para invocar a comando; la opcin '-V' produce una descripcin ms detallada. En este caso, el estado de retorno es cero si se encuentra a comando, y distinto de cero si no.
declare declare [-aAfFilrtux] [-p] [nombre[=valor] ]

Declara variables y les da atributos. Si no se proporciona ningn nombre, se muestran los valores de las variables. La opcin '-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 ms opciones con '-p', declare mostrar los atributos y valores de todas las variables de shell. La opcin '-f' restringir los datos mostrados a las funciones de shell. La opcin '-F' impide que se muestren las definiciones de funcin; slo se imprimen el nombre de la funcin y sus atributos. Si la opcin de shell extdebug est activada
Pgina 54

Captulo 4: Comandos Internos de la Shell

usando shopt (vea la Seccin 4.3.2 [El Comando Interno Shopt]), tambin se mostrar el nombre del archivo fuente y el nmero de lnea donde se define la funcin. '-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 -A -f -i

Cada nombre es una variable de tipo array indexado (vea la Seccin 6.7 [Arrays]) Cada nombre es una variable de tipo array asociativo (vea la Seccin 6.7 [Arrays]). Usa slo nombres de funcin. La variable se trata como un entero; se realiza una evaluacin aritmtica (vea la Seccin 6.5 [Aritmtica de la Shell]) cuando se asigna un valor a la variable. Cuando se asigna un valor a la variable, todos los caracteres maysculas son convertidos a minsculas. Se desactiva el atributo maysculas (upper-case). Convierte los nombres en de slo lectura. A estos nombres no se les puede asignar valores en sentencias de asignacin posteriores ni se puede eliminar su declaracin. 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. Cuando se asigna un valor a la variable, todos los caracteres minsculas son convertidos a maysculas. Se desactiva el atributo minsculas (lower-case). Marca cada nombre para ser exportado a los comandos siguientes mediante el entorno.

-l

-r

-t

-u

-x

Usando '+' en vez de '-' se desactiva el atributo en vez de ser activado, con las excepciones de que no se puede utilizar '+a' para destruir variables de tipo array y '+r' no eliminar el atributo de slo lectura. Cuando se usa en una funcin, declare hace que cada nombre sea local a la funcin, 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 opcin invlida, se intente definir una funcin usando '-f foo=bar', se intente asignar un valor a una variable de slo lectura, se intente asignar un valor a una variable de tipo array sin usar la sintaxis de asignacin compuesta (vea la Seccin 6.7 [Arrays]), alguno de los nombres no sea un nombre de variable de shell vlido, se intente desactivar el estado readonly (slo lectura) para una variable de slo lectura, se intente desactivar el estado de array para una variable de tipo array, o se intente mostrar una funcin inexistente con '-f'.

Pgina 55

Captulo 4: Comandos Internos de la Shell

echo echo [-neE] [arg ] Devuelve los args separados por espacios y terminados con una nueva lnea. El estado de retorno es siempre 0. Si se especifica la opcin '-n' se eliminan los caracteres de nueva_lnea marginales. Si se da la opcin '-e' se activa la interpretacin de los caracteres escapados por barras invertidas. La opcin de shell xpg_echo se puede utilizar para determinar dinmicamente 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 \b \c \e \f \n \r \t \v \\ \0nnn \xHH
enable

alerta (campana) retroceso suprime el resto de la salida escape salto de pgina nueva lnea retorno del carro tabulacin horizontal tabulacin vertical barra invertida El carcter de ocho bits cuyo valor es el valor octal nnn (cero a 3 dgitos octales) el carcter de ocho bits cuyo valor es el valor hexadecimal HH.

enable [-a] [-dnps] [-f nombre_de_archivo] [nombre ]

Activa y desactiva los comandos internos de la shell. Desactivar un comando interno permite ejecutar un comando en disco que tenga el mismo nombre que un comando interno de la shell sin necesidad de especificar una ruta completa, incluso aunque la shell normalmente busca los comandos internos antes que los comandos en disco. Si se usa '-n' los nombres son desactivados. En caso contrario los nombres son activados. Por ejemplo, para usar el binario test encontrado mediante $PATH en vez del comando interno correspondiente, escriba 'enable -n test'. Si se suministra la opcin '-p' o no aparecen argumentos nombre, se imprime una lista de los comandos internos de shell. Sin ningn otro argumento, la lista consiste en todos los comandos internos activados. La opcin '-a' significa listar cada comando interno con una indicacin de si est activado o no. La opcin '-f' significa cargar el nuevo comando interno nombre desde el objeto compartido nombre_de_archivo, en sistemas que permiten la carga dinmica. La opcin
Pgina 56

Captulo 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 opcin '-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 Seccin 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.
help help [-dms] [patrn]

Muestra informacin til acerca de los comandos internos. Si se especifica patrn help da informacin detallada de todos los comandos que concuerdan con el patrn, de otro modo imprime una lista de comandos internos. Las opciones, si son suministradas, tienen los siguientes significados:
-d -m -s

Muestra una descripcin corta de cada patrn Muestra la descripcin de cada patrn en un formato similar al de las pginas de man. Muestra slo un corto resumen de uso para cada patrn.

El estado de retorno es cero a no ser que ningn comando concuerde con patrn.
let let expresin [expresin] El comando interno let permite realizar operaciones aritmticas en las variables de shell. Cada expresin se evala de acuerdo con las reglas dadas ms abajo, en la Seccin 6.5 [Aritmtica de la Shell] Si la ltima expresion se evala a 0, let devuelve 1; en caso

contrario devuelve 0.
local local [opcin] nombre[=valor] ...

Para cada argumento se crea una variable local llamada nombre y se le asigna valor. La opcin puede ser cualquiera de las opciones aceptadas por declare. local slo puede utilizarse dentro de una funcin; esto hace que la variable nombre tenga un mbito de visin restringido a la funcin y a sus hijos. El estado de retorno es cero a menos que local se utilice fuera de una funcin, que el nombre suministrado sea invlido o que nombre sea una variable de slo lectura.
logout logout [n]

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


mapfile mapfile [-n cantidad] [-O origen] [-s cantidad] [-t] [-u fd] [-C llamada_de_retorno] [-c salto] [array] Lee lneas desde la entrada estndar hacia la variable de tipo array indexado array, o

Pgina 57

Captulo 4: Comandos Internos de la Shell

desde el descriptor de fichero fd si se suministra la opcin -u. La variable MAPFILE es el array por defecto. Las opciones, si son suministradas, tienen los siguientes significados:
-n -O -s -t -u -C -c

Copia hasta un mximo de cantidad lneas. Si cantidad es 0, se copian todas las lneas. Comienza asignando a array a partir del ndice origen. El ndice por defecto es 0. Descarta las primeras cantidad lneas ledas. Elimina un carcter marginal nueva_lnea para cada lnea leda. Lee lneas desde el descriptor fd en vez de la entrada estndar. Evala la llamada_de_retorno cada vez que se leen el nmero de lneas dadas por salto. La opcin -c especifica el valor del salto. Especifica el nmero de lneas ledas entre cada llamada a
llamada_de_retorno.

Si se especifica '-C' sin '-c' el salto por defecto es de 5000. Cuando se evala llamada_de_retorno, esta suministra el ndice del siguiente elemento del array para ser asignado como un argumento adicional. La llamada_de_retorno se evala despus de leer la lnea pero antes de que se asigne el elemento del array. Si no se suministra con un origen explcito, mapfile limpiar el array antes de asignarle valores.
mapfile retorna con xito a menos que se le pase una opcin invlida o un argumento de opcin invlido, que el array sea invlido o no asignable o que el array no sea de tipo

indexado.
printf printf [-v var] formato [argumentos]

Escribe los argumentos formateados en la salida estndar 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 estndar, secuencias de caracteres de escape, las cuales son convertidas y copiadas a la salida estndar, y especificaciones de formato, cada una de las cuales produce la impresin del siguiente argumento sucesivo. Adicionalmente a los formatos estndar 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 dgitos en octal escapados comenzando con '\0' pueden contener hasta cuatro dgitos), y '%q ' produce que printf imprima la salida correspondiente a argumento en un formato que pueda ser reutilizado como entrada de la shell. La opcin '-v' produce que la salida sea asignada a la variable var en vez de que sea imprimida en la salida estndar. El formato se reutiliza tantas veces como sea necesario para consumir todos los
Pgina 58

Captulo 4: Comandos Internos de la Shell

argumentos. Si el formato requiere ms argumentos de los que se suministran, las especificaciones de formato adicionales se comportan como si se les hubiera

suministrado un argumento de valor cero o de cadena nula, lo que sea apropiado.


read read [-ers] [-a anombre] [-d delim] [-i texto] [-n ncarac] [-N carac] [-p prompt] [-t temporizador] [-u fd] [nombre ] Se lee una lnea de la entrada estndar o desde el descriptor de fichero fd suministrado como argumento a la opcin -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 ledas desde el flujo de entrada, los nombres restantes son asignados a valores vacos. Se utilizan los caracteres en el valor de la variable IFS para separar la lnea en palabras. El carcter barra invertida '\' se puede utilizar para eliminar cualquier significado especial en el siguiente carcter ledo y para continuar la lnea. Si no se suministran nombres la lnea leda se asigna a la variable REPLY . El cdigo devuelto es cero a menos que se encuentre el final_de_fichero, la lectura expire (en cuyo caso el cdigo devuelto es mayor que 128), o se suministre un descriptor de fichero invlido 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 asignacin. El resto de argumentos nombre son ignorados.
-d delim

Se utiliza el primer carcter de delim para terminar la lnea de entrada en lugar de la nueva_lnea.
-e

Se utiliza Readline para obtener la lnea (vea el Captulo 8 [Edicin de la Lnea de Comandos]). Readline usa los ajustes de edicin actuales (o los ajustes por defecto, si la edicin no fue activada previamente). Si se est utilizando Readline para leer la lnea, se sita texto dentro del buffer de edicin antes de que la edicin comience.

-i texto

-n ncarac read retorna tras leer ncarac caracteres en vez de esperar a leer una lnea

completa de la entrada, pero si encuentra un delimitador regresa aunque se hayan ledo menos de ncarac caracteres antes del delimitador.
-N ncarac read retorna tras leer exactamente ncarac caracteres en vez de esperar por
Pgina 59

Captulo 4: Comandos Internos de la Shell

una lnea completa de entrada, a menos que se encuentre EOF o el tiempo expire. Los caracteres delimitadores encontrados en la entrada no son tratados de forma especial y no provocan que read regrese hasta que se leen ncarac caracteres.
-p prompt

Muestra prompt sin una nueva_lnea marginal, antes de intentar leer cualquier entrada. El prompt se muestra slo si la entrada proviene de una terminal.
-r

Si se da esta opcin, la barra invertida no acta como un carcter de escape. La barra invertida se considera parte de la lnea. En particular, no se puede utilizar un par barra invertida-nueva_lnea como continuacin de lnea. Modo silencioso. Si la entrada proviene de un terminal, los caracteres introducidos no son mostrados. Provoca que read expire y devuelva un fallo si no se ha completado la lectura de una lnea antes de temporizador segundos. temporizador puede ser un nmero decimal con una parte fraccionaria siguiendo al punto decimal. Esta opcin slo es efectiva si read est leyendo la entrada desde un terminal, una tubera 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.

-s

-t temporizador

-u fd readarray

lee la entrada desde el descriptor de archivo fd.

readarray [-n cantidad] [-O origen] [-s cantidad] [-t] [-u fd] [-C llamada_de_retorno] [-c salto] [array]

Lee lneas desde la entrada estndar y las introducen en la variable de tipo array indexado array, o desde el descriptor de fichero fd si se suministra la opcin '-u' Es un sinnimo para mapfile.
source
source filename

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


type type [-afptP] [nombre ] Para cada nombre, indica cmo se debe interpretar este si se utiliza como un nombre de

comando. Si se usa la opcin '-t', type imprime una nica palabra que es una de las siguientes:
Pgina 60

Captulo 4: Comandos Internos de la Shell

'alias', 'function', 'builtin', 'file' o 'keyword', si nombre es un alias, una funcin 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 devuelve un estado de error. Si se usa la opcin '-p', type devuelve o el nombre del archivo de disco que se ejecutara si se especificara nombre o nada si la opcin '-t' no devolviera 'file'. La opcin '-P' fuerza una bsqueda de ruta para cada nombre, incluso si la opcin '-t' no devolviera 'file'. Si un comando est en la tabla hash '-p' y '-P' imprimen el valor de la tabla, no necesariamente el archivo que aparece primero en $PATH. Si se utiliza la opcin '-a' type devuelve todos los lugares que contienen un ejecutable llamado nombre. Esto incluye alias y funciones, si y slo si no se usa tambin la opcin '-p' Si se usa la opcin '-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.
typeset typeset [-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.
ulimit ulimit [-abcdefilmnpqrstuvxHST] [lmite] ulimit proporciona control sobre los recursos disponibles por los procesos iniciados por

la shell, en sistemas que permiten dicho control. Si se da una opcin esta es interpretada como sigue:
-S -H -a -b -c -d -e -f -i -l

Carga e informa de los lmites blandos asociados con un recurso. Carga e informa de los lmites duros asociados con un recurso. Se informa de todos los lmites actuales. El tamao mximo del buffer socket El tamao mximo de los archivos de volcado de memoria (cores) creados. El tamao mximo del segmento de datos de un proceso. La prioridad mxima de planificacin (nice). El tamao mximo de los archivos escritos por la shell y sus hijos. El nmero mximo de seales pendientes El tamao mximo que puede ser bloqueado en memoria.

Pgina 61

Captulo 4: Comandos Internos de la Shell

-m -n -p -q -r -s -t -u -v -x -T

El tamao mximo del conjunto residente (muchos sistemas no obedecen a este lmite). El nmero mximo de descriptores de fichero abiertos (muchos sistemas no permiten establecer este valor). El tamao del buffer de tuberas. El nmero mximo de bytes en las colas de mensajes POSIX. La prioridad mxima de planificacin de tiempo real. El tamao mximo de la pila. La cantidad mxima de tiempo de cpu en segundos El nmero mximo de procesos disponibles para un nico usuario. La cantidad mxima de memoria virtual disponible para el proceso. El nmero mximo de archivos bloqueados. El nmero mximo de hebras.

Si se da lmite este es el nuevo valor del recurso especificado; Se pueden usar los valores de lmites especiales hard, soft y unlimited para ndicar los valores actuales del lmite duro, del lmite blando y sin lmite respectivamente. Un lmite duro no puede ser incrementado por un usuario no-root una vez que est establecido; un lmite blando puede ser incrementado hasta el valor del lmite duro. De otro modo, se imprime el valor actual del lmite blando para el recurso especificado, a menos que se suministre la opcin '-H'. Cuando establecemos nuevos lmites, si no se suministra la opcin '-H' ni la opcin '-S', se establece tanto el lmite duro como el lmite blando. Si no se da ninguna opcin, entonces se asume la opcin '-f'. Los valores se dan en incrementos de 1024bytes excepto con la opcin '-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 opcin o un argumento invlidos, o que ocurra algn error mientras se establece el nuevo lmite.
unalias unalias [-a] [nombre ] Elimina cada nombre de la lista de alias. Si se suministra '-a' se eliminan todos los alias.

Los alias se describen en la Seccin 6.6 [Alias].

4.3.- Modificando el Comportamiento de la Shell.


4.3.1.- El comando Interno Set
Este comando interno es tan complicado que se merece su propia seccin. set le permite cambiar los valores de las opciones de la shell y establecer parmetros posicionales, o mostrar los nombres y los valores de las variables de la shell.

Pgina 62

Captulo 4: Comandos Internos de la Shell

set set [--abefhkmnptuvxBCEHPT] [-o opcin] [argumento ] set [+abefhkmnptuvxBCEHPT] [+o opcin] [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 localizacin actual, en un formato que puede ser reutilizado como entrada para establecer o reiniciar las variables establecidas actualmente. Las variables de slo lectura no pueden ser reiniciadas. En modo POSIX, slo 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 -b

Marca las variables y funciones que estn modificadas o creadas para exportar al entorno de los siguientes comandos. Produce que se reporte inmediatamente el estado de terminacin de las tareas en segundo plano, en vez de antes de imprimir el siguiente prompt primario. Sale inmediatamente si una tubera (vea la Seccin 3.2.2 [Tuberas]), que puede consistir en un nico comando simple (vea la Seccin 3.2.1 [Comandos Simples]), un comando de subshell encerrado entre parntesis (vea la Seccin 3.2.4.3 [Agrupacin de Comandos]) o uno de los comandos ejecutados como parte de una lista de comandos encerrados entre llaves (vea la Seccin 3.2.4.3 [Agrupacin 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 comprobacin 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 tubera 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 opcin se aplica al entorno de la shell y a cada entorno de subshell aisladamente (vea la Seccin 3.7.3 [Entorno de Ejecucin de Comandos]), y puede causar que las subshells finalicen antes de ejecutar todos los comandos. Desactiva la expansin de nombres de fichero (globalmente). Localiza y recuerda (mediante una tabla hash) los comandos despus de que sean buscados para ejecutarlos. Esta opcin est activada por defecto. Todos los argumentos en forma de sentencias de asignacin se sitan en el entorno para un comando, no slo aquellos que preceden al nombre del comando. Activa el control de tareas (vea el Captulo 7 [Tareas de Control]).
Pgina 63

-e

-f -h -k

-m

Captulo 4: Comandos Internos de la Shell

-n

Lee comandos pero no los ejecuta; esto se puede usar para comprobar un guin de comandos en busca de errores sintcticos. Esta opcin es ignorada por las shells interactivas. Establece la opcin correspondiente a nombre-opcin:
allexport braceexpand emacs

-o nombre-opcin

como -a. como -B. Utiliza un interfaz de edicin de lneas al estilo emacs (vea el Captulo 8 [Edicin de la Lnea de Comandos]). Esto tambin afecta al interfaz de edicin usado por read -e. como -e. como -E. como -T. como -h. como -H. Activa la historia de comandos, como se describe en la Seccin 9.1 [Caractersticas de Historia de Bash]. Esta opcin est activada por defecto en las shells interactivas. Una shell interactiva no saldr tras leer un EOF. como -k. como -m. como -C. como -n. como -f. Actualmente es ignorado. como -b. como -u. como -t. como -P. Si est establecido, el valor de retorno de una tubera es el valor del ltimo comando (el situado ms a la derecha) que finaliza con un estado distinto de cero, o cero si todos los comandos en la tubera finalizan con xito. Esta

errexit errtrace functrace hashall histexpand history

ignoreeof keyword monitor noclobber noexec noglob nolog notify nounset onecmd physical pipefail

Pgina 64

Captulo 4: Comandos Internos de la Shell

opcin est desactivada por defecto.


posix

Cambia el comportamiento de Bash en las operaciones que por defecto difieren del estndar POSIX para ajustarse al estndar (vea la Seccin 6.11 [El Modo POSIX de Bash]). Esto se hace con la intencin de hacer que Bash llegue a ser un superconjunto estricto de ese estndar. como -p. como -v. Utiliza una interfaz de edicin de lneas al estilo vi. Esto tambin afecta a la interfaz de edicin usada con read -e. como -x.

privileged verbose vi

xtrace -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 opcin -p, se toman estas acciones y el id de usuario efectivo es ajustado al valor del id de usuario real. Si la opcin -p se suministra al inicio, no se restablece el id de usuario efectivo. Desactivar esta opcin produce que los ids de usuario y de grupo efectivos sean ajustados a los ids de usuario y grupo reales. Finaliza despus de leer y ejecutar un comando. Cuando se realiza la expansin de parmetros trata las variables y parmetros no definidos distintos de los parmetros especiales '@' o '*' como un error. Se escribir un mensaje de error en la salida de error estndar, y una shell no-interactiva finalizar. Imprime las lneas de entrada de la shell tal cmo son ledas. Imprime una traza de los comandos simples, los comandos for, los comandos select y los comandos aritmticos for y sus argumentos o listas de palabras asociadas despus 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. La shell realizar expansin de llaves (vea la Seccin 3.5.1 [Expansin de llaves]). Esta opcin est activa por defecto. Evita que la redireccin de salida usando '>', '>&' y '<>' sobreescriba archivos existentes.
Pgina 65

-t -u

-v -x

-B -C

Captulo 4: Comandos Internos de la Shell

-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. Activa la sustitucin de la historia estilo '!' (vea la Seccin 9.3 [Interaccionando con la Historia]). Esta opcin est activada por defecto en las shells interactivas. Si est establecida, no sigue los enlaces simblicos cuando ejecuta comandos como cd el cual cambia el directorio actual. En su lugar se utiliza el directorio fsico. Por defecto Bash sigue la cadena lgica de directorios cuando realiza comandos que cambian el directorio actual. Por ejemplo si '/usr/sys' es un enlace simblico a '/usr/local/sys' entonces:
$ cd /usr/sys; echo $PWD /usr/sys $ cd ..; pwd /usr

-H

-P

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 sustitucin de comandos y los comandos ejecutados en un entorno de subshell. Las trampas DEBUG y RETURN normalmente no son heredadas en tales casos. Si ningn argumento sigue a esta opcin, entonces se quitan los parmetros posicionales. En caso contrario, los parmetros 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 parmetros posicionales. Las opciones '-x' y '-v' son desactivadas. Si no hay argumentos, los parmetros posicionales permanecen sin cambios.

--

Usar '+' en vez de '-' produce que las opciones sean desactivadas. Las opciones tambin se pueden usar en la invocacin de la shell. Se puede encontrar el conjunto de opciones actuales en $- . Los N argumentos restantes son parmetros posicionales y se asignan, en orden, a $1 , $2 , , $N . Al parmetro especial # se le asigna el valor N. El estado de retorno es siempre cero a menos que se suministre alguna opcin invlida.

Pgina 66

Captulo 4: Comandos Internos de la Shell

4.3.2.- El Comando Interno Shopt


Este comando interno le permite cambiar un comportamiento adicional opcional de la shell.
shopt shopt [-pqsu] [-o] [nombreopt ]

Conmuta los valores de las variables que controlan el comportamiento opcional de la shell. Sin opciones o con la opcin '-p' muestra una lista de todas las opciones que permiten ser ajustadas, con una indicacin de cuales estn establecidas y cuales no. La opcin '-p' produce que la salida sea mostrada en un formato que permite ser reutilizado como entrada. El resto de opciones tienen los siguientes significados:
-s -u -q

Activa cada nombreopt. Desactiva cada nombreopt. Elimina la salida normal; el estado de retorno indica si el nombreopt est activado o desactivado. Si se dan mltiples argumentos nombreopt con '-q', el estado de retorno es cero si todos los nombreopt estn activados y distinto de cero en caso contrario. Restringe los valores de nombreopt a aquellos definidos para la opcin '-o' para el comando interno set (vea la Seccin 4.3.1 [El Comando Interno Set]).

-o

Si se utilizan las opciones '-s' o '-u' sin argumentos nombreopt, se muestran nicamente aquellas opciones que estn establecidas o no, respectivamente. A menos que se avise de lo contrario, las opciones de shopt estn desactivadas por defecto. El estado de retorno cuando se listan opciones es cero si todos los nombres_de_opcin estn 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 opcin de shell vlida. 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 opcin slo se usa en las shells interactivas.
cdable_vars

Si esta opcin 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 corregirn pequeos 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 carcter en
Pgina 67

Captulo 4: Comandos Internos de la Shell

exceso. Si se encuentra una correccin se imprime la ruta correcta y el comando se ejecuta. Esta opcin slo 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 bsqueda de ruta de la forma habitual.
checkjobs

Si est establecida, Bash lista el estado de cualquier tarea detenida o en ejecucin antes de terminar una shell interactiva. Si existen tareas en ejecucin la salida se retrasa hasta que se intenta una segunda salida sin que intervenga un comando (vea el Captulo 7 [Control de Tareas]). La shell siempre retrasa la salida si existen tareas detenidas.
checkwinsize

Si est establecida, Bash comprueba el tamao de ventana despus de cada comando y, si es necesario, actualiza el valor de LINES (lneas) y COLUMNS (columnas).
cmdhist

Si est establecida, Bash intenta guardar todas las lneas de un comando multilnea en la misma entrada de la historia. Esto permite reeditar fcilmente los comandos multilnea.
compat31

Si est activada, Bash cambia su comportamiento con respecto a los argumentos entrecomillados para el operador de comandos condicionales '=~' al de la versin 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 expansin de nombres de archivo.
execfail

Si esta opcin 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 ms abajo, en la Seccin 6.6 [Alias]). Esta opcin est activada por defecto para las shells interactivas.

Pgina 68

Captulo 4: Comandos Internos de la Shell

extdebug

Si est establecida, se activa el comportamiento previsto para usar con depuradores: 1. La opcin '-F' pasada al comando interno declare (vea la Seccin 4.2 [Comandos Internos de Bash]) muestra el nombre del archivo fuente y el nmero de lnea correspondiente a cada nombre de funcin 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 y la shell est ejecutando una subrutina (una funcin de shell o un guin 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 Seccin 5.2 [Variables de Bash]). 5. Se activa la traza de funciones: la sustitucin 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 sustitucin de comandos, las funciones de shell y las subshells invocadas con ( comando ) heredan la trampa ERROR.
extglob

Si est establecida, se activan las caractersticas de concordancia de patrones extendidos (vea la Seccin 3.5.8.1 [Concordancia de Patrones]).
extquote

Si est establecida, el entrecomillado $'cadena' y $cadena se realiza dentro de las expansiones de ${parmetro} encerradas entre dobles comillas. Esta opcin est activada por defecto.
failglob

Si est establecida, los patrones que fallan al ajustar nombres de archivo durante la expansin de nombres de archivo resultan en un error de expansin.
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 Seccin 5.2 [Variables de Bash] para obtener una descripcin de FIGNORE. Esta opcin est activada por defecto.

Pgina 69

Captulo 4: Comandos Internos de la Shell

globstar

Si est establecida, el patrn '**' usado en un contexto de expansin de nombres de fichero concordar con los ficheros y cero o ms directorios y subdirectorios. Si el patrn es seguido por una '/', slo concordarn los directorio y subdirectorios.
gnu_errfmt

Si est establecida, los mensajes de error de la shell se escribirn en el formato de mensajes de error estndar de GNU.
histappend

Si est establecida, cuando la shell finaliza, la lista de historia se anexa al archivo cuyo nombre se da en el valor de la variables HISTFILE en vez de sobreescribir el archivo.
histreedit

Si est establecida, y se est utilizando Readline, el usuario tendr la oportunidad de reeditar una sustitucin de la historia fallida.
histverify

Si est establecida, y se est usando Readline, los resultados de la sustitucin de la historia no son pasados inmediatamente al analizador de la shell. En vez de eso, la lnea resultante se carga en el buffer de edicin de lneas ledas, permitiendo su posterior modificacin.
hostcomplete

Si est establecida, y se est usando Readline, Bash intentar realizar el completado de los nombres de anfitrin cuando se est completando una palabra que contenga un '@' (vea la Seccin 8.4.6 [Comandos para completado]). Esta opcin est activada por defecto.
huponexit

Si est establecida, Bash enviar SIGHUP a todas las tareas cuando una shell de inicio de sesin interactivo finalice (vea la Seccin 3.7.6 [Seales]).
interactive_comments

Permite que una palabra que comience con '#' provoque que esa palabra y todas las que le sigan en la misma lnea sean ignoradas en una shell interactiva. Esta opcin est activada por defecto.
lithist

Si est activada, y la opcin cmdhist tambin est activada, los comandos de lneas mltiples se guardan en la historia con las nuevas lneas embebidas en vez de usar operadores punto y coma, cuando esto sea posible.
login_shell

La shell establece esta opcin si es iniciada como una shell de inicio de sesin (vea la Seccin 6.1 [Invocando Bash]). Su valor no se puede cambiar.

Pgina 70

Captulo 4: Comandos Internos de la Shell

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 lnea vaca.
nocaseglob

Si est establecida, Bash realiza la expansin de los nombres de archivo de forma que no diferencia entre maysculas y minsculas.
nocasematch

Si est establecida, Bash ajusta los patrones de forma que no diferencia entre maysculas y minsculas cuando busca las concordancias durante la ejecucin de los comandos condicionales case o [[.
nullglob

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

Si est establecida, las caractersticas de completado programable (vea la Seccin 8.6 [Completado Programable] estarn activadas. Esta opcin est activada por defecto.
promptvars

Si est establecida, las cadenas de prompt sufren expansin de parmetros, sustitucin de comandos, expansin aritmtica y eliminacin de entrecomillado tras ser expandidas como se describe ms abajo (vea la Seccin 6.9 [Imprimiendo un prompt]). Esta opcin est activada por defecto.
restricted_shell

La shell establece esta opcin si es iniciada en modo restringido (vea la Seccin 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 nmero de parmetros posicionales.
sourcepath

Si est establecida, el comando interno source usa los valores del PATH
Pgina 71

Captulo 4: Comandos Internos de la Shell

para encontrar el directorio que contiene el archivo suministrado como argumento. Esta opcin 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_opcin estn 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 opcin de shell vlida.

4.4.- Comandos Internos Especiales


Por razones histricas, el estndar 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 bsqueda de comandos. 2. Si un comando interno especial devuelve un estado de error, una shell no interactiva se cerrar. 3. Las sentencias de asignacin que precedan al comando permanecen en efecto en el entorno de la shell despus 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 Seccin 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

Pgina 72

Captulo 5: Variables de la shell

5.- Variables de Shell


Este captulo describe las variables de shell que son usadas por Bash. Bash asigna automticamente valores por defecto a algunas variables.

5.1.- Variables de la Shell Bourne


Bash 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.
CDPATH

Una lista de directorios separados por dos puntos (':') utilizada como ruta de bsqueda para el comando interno cd.
HOME

El directorio de usuario actual; el valor por defecto para el comando interno cd. El valor de esta variable tambin se utiliza para la expansin de tildes (vea la Seccin 3.5.2 [Expansin de Tildes]).
IFS

Una lista de caracteres que separan campos; se utiliza cuando la shell separa las palabras que forman parte de una expansin.
MAIL

Si este parmetro 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.
MAILPATH

Es una lista de nombres de archivo separados por dos puntos (':') los cuales son comprobados peridicamente 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.
OPTARG

El valor del ltimo argumento de opcin procesado por el comando interno getopts.
OPTIND

El ndice del ltimo argumento de opcin procesado por el comando interno getopts.
PATH

Una 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.
PS1

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

Captulo 5: Variables de la shell

PS2

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

5.2.- Variables de Bash


Estas variables son establecidas o usadas por Bash, pero otras shell normalmente no las tratan de forma especial. Algunas variables de Bash estn descritas en otros captulos: variables para controlar las caractersticas de control de tareas (vea la Seccin 7.3 [Variables de Control de Tareas]).
BASH

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


BASHOPTS

Una lista de opciones de shell activas separadas por un ':'. Cada palabra en la lista es un argumento vlido para la opcin '-s' del comando interno shopt (vea la Seccin 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 opcin de la shell en la lista se activar antes de leer cualquier archivo de inicio. Esta variable es de slo lectura.
BASHPID

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

Una 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 Seccin 4.1 [Comandos Internos de Shell]). Los elementos aadidos a este array aparecen en la lista de alias; quitar elementos del array produce que sean eliminados de la lista de alias.
BASH_ARGC

Una variable de tipo array cuyos valores son el nmero de parmetros en cada marco de la pilla de llamadas de ejecucin actual de Bash. El nmero de parmetros 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 nmero de parmetros pasado se empuja dentro de BASH_ARGC. La shell establece BASH_ARGC slo cuando se encuentra en el modo de depuracin extendido (vea la Seccin 4.3.2 [El Comando Interno Shopt] para obtener una descripcin de la opcin extdebug del comando interno shopt).
BASH_ARGV

Una variable de tipo array que contiene todos los parmetros en la pila de llamadas de ejecucin actual de Bash. El parmetro final de la ltima subrutina llamada se encuentra en la cima de la pila; el primer parmetro de la llamada inicial est en el fondo. Cuando se ejecuta una subrutina, los parmetros suministrados son empujados dentro de BASH_ARGV. La shell establece BASH_ARGV slo cuando se ejecuta en el modo de depuracin extendido. (vea la Seccin 4.3.2 [El Comando Interno Shopt] para obtener una descripcin de la opcin extdebug del comando interno shopt).
Pgina 74

Captulo 5: Variables de la shell

BASH_CMDS

Una 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 Seccin 4.1 [Comandos Internos de la Shell Bourne]). Los elementos aadidos a este array aparecen en la tabla hash; quitar elementos de este array produce que los comandos sean removidos de la tabla hash.
BASH_COMMAND

El comando que est siendo ejecutado actualmente o est a punto de ser ejecutado, a menos que la shell est ejecutando un comando como resultado de una trampa, en cuyo caso este es el comando que se ejecutaba en el momento de la trampa.
BASH_ENV

Si esta variable est establecida cuando se invoca a Bash para ejecutar un guin de comandos, su valor se expande y se usa como el nombre del fichero de inicio que debe ser ledo antes de ejecutar el guin. Vea la Seccin 6.2 [Archivos de Inicio de Bash].
BASH_EXECUTION_STRING

El argumento del comando para la opcin de invocacin '-c'.


BASH_LINENO

Una variable de tipo array cuyos miembros son los nmeros de lnea en los archivos fuente correspondientes a cada miembro de FUNCNAME . ${BASH_LINENO[$i]} es el nmero de lnea en el archivo fuente donde se llam a ${FUNCNAME[$i]} (o $ {BASH_LINENO[$i-1]} si es referenciado dentro de otra funcin de shell). El nombre de archivo correspondiente es ${BASH_SOURCE[$i]} . Use LINENO para obtener el nmero de lnea actual.
BASH_REMATCH

Una variable de tipo array cuyos miembros son asignados por el operador binario '=~' para el comando condicional [[ (vea la Seccin 3.2.4.2 [Construcciones Condicionales]). El elemento con ndice 0 es la porcin de la cadena que concuerda con toda la expresin regular. El elemento con ndice n es la porcin de la cadena que concuerda con la n- sima subexpresin parentizada. Esta variable es de slo lectura.
BASH_SOURCE

Una variable de tipo array cuyos miembros son los nombres de archivo correspondientes a los elementos en la variable de tipo array FUNCNAME .
BASH_SUBSHELL

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

Una variable de slo lectura de tipo array (vea la Seccin 6.7 [Arrays]) cuyos miembros mantienen la informacin de versin para esta instancia de Bash. Los valores son asignados a los miembros del array como sigue:
BASH_VERSINFO[0]

El nmero de versin mayor (la distribucin).


Pgina 75

Captulo 5: Variables de la shell

BASH_VERSINFO[1]

El nmero de versin menor (la versin).


BASH_VERSINFO[2]

El nivel de parcheado
BASH_VERSINFO[3]

La versin de construccin.
BASH_VERSINFO[4]

El estado de la distribucin (p.e., beta1).


BASH_VERSINFO[5]

El valor de MACHTYPE.
BASH_VERSION

El nmero de versin de la instancia actual de Bash.


BASH_XTRACEFD

Si est establecido a un entero que corresponde con un descriptor de archivo vlido, 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 diagnstico 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 vaca produce que la salida de traza sea enviada a la salida de error estndar. Advierta que ajustar BASH_XTRACEFD a 2 (el descriptor de fichero de la salida de error estndar) y luego quitarlo provocar que se cierre la salida de error estndar.
COLUMNS

Usado por el comando interno select para determinar la anchura del terminal cuando imprime listas de seleccin. Se establece automticamente con la recepcin de un SIGWINCH .
COMP_CWORD

Un ndice en ${COMP_WORDS} de la palabra que contiene la posicin actual del cursor. Esta variable est disponible slo en funciones de shell invocadas por las caractersticas de completado programable (vea la Seccin 8.6 [Completado Programable]).
COMP_LINE

La lnea de comandos actual. Esta variable est disponible slo en funciones de shell y en comandos externos invocados por las caractersticas de completado programable (vea la Seccin 8.6 [Completado Programable]).
COMP_POINT

El ndice de la posicin actual del cursor relativa al comienzo del comando actual. Si la posicin actual del cursor es al final del comando actual, el valor de esta variable es igual a ${#COMP_LINE}. Esta variable est disponible slo en funciones de shell y en comandos externos invocados por las caractersticas de completado programable (vea la Seccin 8.6 [Completado Programable]).

Pgina 76

Captulo 5: Variables de la shell

COMP_TYPE

Se establece a un valor entero que corresponde al tipo de completado que se ha intentado y que caus la llamada a una funcin 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 slo en funciones de shell y en comandos externos invocados por las caractersticas de completado programable (vea la Seccin 8.6 [Completado Programable])
COMP_KEY

La llave (o llave final o una secuencia de llaves) usada para invocar la funcin de completado actual.
COMP_WORDBREAKS

El juego de caracteres que la librera 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_WORDS

Una variable de tipo array consistente en las palabras individuales contenidas en la lnea de comandos actual. La lnea es dividida en palabras como lo hara Readline, usando COMP_WORDBREAKS como se describe ms arriba. Esta variable est disponible nicamente en las funciones de shell invocadas por las caractersticas de completado programable (vea la Seccin 8.6 [Completado Programable]).
COMPREPLY

Una variable de tipo array desde la cual Bash lee los posibles completados generados por una funcin de shell invocada por las caractersticas de completado programable (vea la Seccin 8.6 [Completado Programable]).
DIRSTACK

Una variable de tipo array que almacena los contenidos actuales de la pila de directorios. 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 aadir 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.
EMACS

Si 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 edicin de lneas.
EUID

El nmero de id de usuario efectivo del usuario actual. Esta variable es de slo lectura.
FCEDIT

El editor usado por defecto por la opcin '-e' para el comando interno fc.
Pgina 77

Captulo 5: Variables de la shell

FIGNORE

Es una lista, cuyos miembros estn 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, podra valer '.o:~ '
FUNCNAME

Una variable de tipo array que contiene los nombres de todas las funciones de shell que estn actualmente en la pila de llamadas de ejecucin. El elemento con ndice 0 es el nombre de cualquier funcin de shell que est actualmente en ejecucin. El elemento ms en el fondo es main. Esta variable existe slo cuando se est ejecutando una funcin 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.
GLOBIGNORE

Una lista de patrones separados por dos puntos que definen el juego de nombres de fichero que deben ser ignorados por la expansin de nombres de fichero. Si un nombre de fichero concuerda con un patrn de expansin de nombres de fichero y tambin concuerda con uno de los patrones en GLOBIGNORE, este es eliminado de la lista de concordancias.
GROUPS

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

Hasta tres caracteres que controlan la expansin de la historia, la sustitucin rpida y la tokenizacin (vea la Seccin 9.3 [Interaccin con la Historia]). El primer carcter es el carcter de expansin de la historia, esto es, el carcter que significa el comienzo de una expansin de la historia, normalmente '!'. El segundo carcter es el carcter que significa 'sustitucin rpida' cuando se encuentra como el primer carcter de una lnea, normalmente es '^'. El tercer carcter es opcional e indica que el resto de la lnea es un comentario cuando se encuentra como el primer carcter de una palabra, normalmente es '#'. El carcter de comentario de la historia provoca que se evite la sustitucin de la historia para el resto de las palabras de la lnea. Este no produce necesariamente que el analizador de la shell trate el resto de la lnea como un comentario.
HISTCMD

El nmero de historia, o el ndice en la lista de historia, del comando actual. Si se elimina HISTCMD esta pierde sus propiedades especiales, incluso si es restablecida posteriormente.
HISTCONTROL

Una lista de valores separados por dos puntos que controlan cmo se guardan los comandos en la lista de historia. Si la lista de valores incluye 'ignorespace', las lneas
Pgina 78

Captulo 5: Variables de la shell

que comienzan un carcter espacio no se guardan en la lista de historia. Un valor de 'ignoredups' produce que las lneas 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 lneas previas que encajan con la lnea actual sean eliminadas de la lista de historia antes de que esa lnea sea guardada. Cualquier valor que no est entre los anteriores es ignorado. Si se elimina HISTCONTROL , o este no incluye un valor vlido, todas las lneas ledas por el analizador de la shell son guardadas en la lista de historia, teniendo en cuenta el valor de HISTIGNORE. La segunda lnea y las posteriores de un comando compuesto multilnea no son comprobadas y son aadidas a la historia sin tener en cuenta el valor de HISTCONTROL .
HISTFILE

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

El nmero mximo de lneas 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 ms antiguas, para que no contenga ms que el nmero de lneas dado. Tambin se recorta el archivo de historia a este tamao despus de escribir en l cuando una shell interactiva finaliza. El valor por defecto es 500.
HISTIGNORE

Una lista de patrones separados por dos puntos usada para decidir qu lneas de comandos deben ser guardados en la lista de historia. Cada patrn es anclado al principio de la lnea y debe encajar con la lnea completa (no se aade '*' al final). Cada patrn se comprueba con la lnea despus de que se realicen las comprobaciones especificadas por HISTCONTROL . Adicionalmente a los caracteres de ajuste de patrones normales de la shell, el carcter '&' concuerda con la lnea 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 lneas de un comando compuesto multilnea, y son aadidas a la historia sin importar el valor de HISTIGNORE.
HISTIGNORE incluye la funcin de HISTCONTROL. Un patrn '&' es idntico a ignoresdups, y un patrn '[]*' es idntico a ignorespace. Combinando estos dos patrones, separados por un dos puntos, obtenemos la funcionalidad de ignoreboth. HISTSIZE

El nmero mximo de comandos que deben ser mantenidos en la lista de historia. El valor por defecto es 500.
HISTTIMEFORMAT

Si esta variable est establecida y no es nula, su valor se usa como una cadena de formato para strftime para imprimir la marca de tiempo asociada con cada entrada de la
Pgina 79

Captulo 5: Variables de la shell

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 travs de las sesiones de la shell. Esta usa el carcter de comentario de la historia para distinguir las marcas de tiempo del resto de lneas de la historia.
HOSTFILE

Contiene el nombre de un fichero en el mismo formato que '/etc/hosts' que debera ser ledo cuando la shell necesite completar un nombre de anfitrin (host). La lista de posibles completados de nombres de anfitrin puede ser modificada durante la ejecucin de la shell; la siguiente vez que se intente el completado de nombres de anfitrin despus de que el valor de esta variable haya cambiado, Bash aadir 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 anfitrin. Cuando se elimina la variable HOSTFILE , se limpia la lista de nombres de anfitrin.
HOSTNAME

El nombre del anfitrin (host) actual.


HOSTTYPE

Una cadena que describe la mquina en la que se est ejecutando Bash.


IGNOREEOF

Controla la accin de la shell a la recepcin de un carcter EOF (fin de fichero) cmo nica entrada. Si est establecido, el valor indica el nmero de caracteres EOF consecutivos que pueden ser ledos como el primer carcter de una entrada antes de que la shell finalice. Si la variable existe pero no tiene un valor numrico (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 slo tiene efecto para las shells interactivas.
INPUTRC

El nombre del archivo de inicializacin de Readline, sobreescribiendo el valor por defecto '~/.inputrc'
LANG

Se utiliza para determinar la categora de localizacin para cualquier categora no seleccionada especficamente con una variable cuyo nombre comience con LC_.
LC_ALL

Esta variable sobreescribe el valor de LANG y cualquier otra variable LC_ especificando una categora de localizacin.
LC_COLLATE

Esta variable determina el orden de clasificacin empleado cuando se ordenan los resultados de una expansin de nombre de fichero, y determina el comportamiento de las expresiones de rango, las clases de equivalencia, y las secuencias de clasificacin dentro de una expansin de nombres de archivo y concordancia de patrones (vea la Seccin 3.5.8 [Expansin de Nombres de Fichero]).
Pgina 80

Captulo 5: Variables de la shell

LC_CTYPE

Esta variable determina la interpretacin de caracteres y el comportamiento de las clases de caracteres dentro de una expansin de nombres de fichero y concordancia de patrones (vea la Seccin 3.5.8 [Expansin de nombres de Fichero]).
LC_MESSAGES

Esta variable determina la localizacin usada para traducir las cadenas entre comillas dobles precedidas por un '$' (vea la Seccin 3.1.2.5 [Traduccin de Localizacin]).
LC_NUMERIC

Esta variable determina la categora de localizacin usada para el formateado numrico.


LINENO

El nmero de lnea en el guin de comandos o en la funcin de shell que se est ejecutando actualmente.
LINES

Usada por el comando interno select para determinar la longitud de columna para imprimir listas de seleccin. Se establece automticamente tras recibir una seal SIGWINCH .
MACHTYPE

Una cadena que describe completamente el tipo de sistema en el que se est ejecutando Bash, en el formato estndar de GNU cpu-company-system.
MAILCHECK

Con cuanta frecuencia (en segundos) la shell debera 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 nmero mayor o igual que cero, la shell desactiva la comprobacin del correo.
OLDPWD

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


OPTERR

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

Una cadena que describe el sistema operativo en el que se est ejecutando Bash.
PIPESTATUS

Una variable de tipo array (vea la Seccin 6.7 [Arrays]) que contiene una lista de valores de estados de salida de los procesos en la tubera ms recientemente ejecutada en primer plano (la cual puede contener slo un nico comando).
POSIXLY_CORRECT

Si esta variable est en el entorno cuando Bash comienza, la shell entra en el modo POSIX (vea la Seccin 6.11 [El Modo POSIX de Bash]) antes de leer los archivos de inicio, como si se hubiese suministrado la opcin de invocacin '--posix'. Si es
Pgina 81

Captulo 5: Variables de la shell

establecida mientras la shell est en ejecucin, Bash activa el modo POSIX, como si se hubiese ejecutado el comando set -o posix
PPID

El ID de proceso del proceso padre de la shell. Esta variable es de slo lectura.


PROMPT_COMMAND

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

Si est establecido en un nmero mayor que cero, su valor se usa como el nmero de componentes de rastreo de directorio a mantener cuando se expanden las cadenas de escape de prompt \w y \W (vea la Seccin 6.9 [Imprimiendo un Prompt]). Los caracteres eliminados son reemplazados con una elipsis '..'
PS3

El valor de esta variable se utiliza como el prompt para el comando select. Si esta variable no est establecida, se utiliza como prompt para el comando select el '#?'.
PS4

Este valor es el prompt que se imprime antes de imprimir la lnea de comandos cuando la opcin '-x' est establecida (vea la Seccin 4.3.1 [El Comando Interno Set]). El primer carcter de PS4 se replica varias veces, tantas como sea necesario, para indicar mltiples niveles de indireccin. El valor por defecto es '+'.
PWD

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


RANDOM

Cada vez que se referencia a este parmetro se genera un entero aleatorio entre 0 y 32767. Un valor asignado a esta variable se utiliza como semilla para el generador de nmeros aleatorios.
REPLY

La variable por defecto para el comando interno read.


SECONDS

Esta variable se expande al nmero 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 ms el nmero de segundos desde la asignacin.
SHELL

La ruta completa a la shell se guarda en esta variable del entorno. Si no est establecida cuando la shell comienza, Bash le asigna la ruta completa de la shell de inicio de sesin del usuario.
SHELLOPTS

Una lista separada por dos puntos de opciones de shell que estn activas. Cada palabra en la lista es un argumento vlido para la opcin '-o' del comando interno set (vea la
Pgina 82

Captulo 5: Variables de la shell

Seccin 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 opcin de la shell incluida en la lista se activar antes de leer cualquier fichero de inicio. Esta variable es de slo lectura.
SHLVL

Es incrementada en una unidad cada vez que se inicia una nueva instancia de Bash. Esto es til para contar cmo de profundo se anidan sus shells de Bash.
TIMEFORMAT

El valor de este parmetro se utiliza como una cadena de formato especificando cmo se debera mostrar la informacin de temporizacin para las tuberas prefijadas con la palabra reservada time. El carcter '%' introduce una secuencia de escape que es expandida a un valor de tiempo o a alguna otra informacin. Las secuencias de escape y sus significados son como siguen; los corchetes denotan partes opcionales.
%% %[p][l]R %[p][l]U %[p][l]S %P

Un literal '%' El tiempo transcurrido en segundos El nmero de segundos de CPU gastados en el modo de usuario. El nmero de segundos de CPU gastados en el modo de sistema. El porcentaje de CPU, calculado como (%U + %S) / %R

La p opcional es un dgito que especifica la precisin, el nmero de dgitos 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 informacin de temporizacin. Se aade un carcter nueva lnea al margen cuando se muestra la cadena de formato.
TMOUT

Si est establecido a un valor mayor que cero, TMOUT se trata como el temporizador por defecto del comando interno read (vea la Seccin 4.2 [Comandos Internos de Bash]). El comando select (vea la Seccin 3.2.4.2 [Construcciones Condicionales]) termina si la entrada no llega despus de transcurrir TMOUT segundos cuando la entrada viene desde una terminal. En una shell interactiva, el valor se interpreta como el nmero de segundos a esperar por una entrada tras mostrar el prompt primario. Bash termina tras transcurrir este nmero de segundos si no se recibe la entrada.
TMPDIR

Si est establecida, Bash utiliza este valor como el nombre de un directorio en el cual
Pgina 83

Captulo 5: Variables de la shell

Bash crea los archivos temporales de los usuarios de la shell.


UID

El valor numrico del id de usuario real del usuario actual. Esta variable es de slo lectura.

Pgina 84

Captulo 6: Caractersticas de Bash

6.- Caractersticas de Bash


Esta seccin describe las caractersticas nicas de Bash.

6.1.- Invocando a Bash


bash [opt-larg] [-ir] [-abefhkmnptuvxdBCDHP] [-o opcin] [-O opcin_corta] [argumento ] bash [opt-larg] [-abefhkmnptuvxdBCDHP] [-o opcin] [-O opcin_corta] -c cadena [argumento ] bash [opt-larg] -s [-abefhkmnptuvxdBCDHP] [-o opcin] [-O opcin_corta] [argumento ]

Adicionalmente a las opciones de lnea de comandos de shell de un nico carcter (vea la Seccin 4.3.1 [El Comando Interno Set]), hay varias opciones multicarcter que puede usar. Estas opciones deben aparecer en la lnea de comandos antes de las opciones de un nico carcter para que puedan ser reconocidas.
--debugger

ordena que se ejecute el perfl de depuracin antes de que la shell se inicie. Activa el modo de depuracin extendido (vea la Seccin 4.3.2 [El Comando Interno Shopt] para una descripcin de la opcin extdebug para el comando interno shopt) y el traceado de las funciones de shell (vea la Seccin 4.3.1 [El Comando Interno Set] para una descripcin de la opcin -o functrace )
--dump-po-strings

Se imprime una lista de cadenas encerradas entre comillas dobles precedidas cada una de ellas por '$' en la salida estndar 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'

--help Muestra un mensaje de uso en la salida estndar y sale con xito.


--init-file nombre_de_archivo --rcfile nombre_de_archivo

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

Equivale a '-l'.
--noediting

No usa la librera Readline de GNU (vea el captulo 8 [Edicin de la Lnea de Comandos]) para leer lneas de comandos en las shell interactivas.
--noprofile

No carga el archivo de inicio de sistema '/etc/profile' ni cualquier otro fichero de inicializacin personal '~/.bash_profile', '~/.bash_login', o '~/.profile' cuando se invoca a
Pgina 85

Captulo 6: Caractersticas de Bash

la shell como una shell de inicio de sesin.


--norc

No lee el archivo de inicializacin '~/.bashrc' en una shell interactiva. Esta opcin est activa por defecto si la shell se invoca con sh.
--posix

Cambia el comportamiento de Bash cuando las operaciones por defecto difieren del estndar POSIX para que se ajuste al estndar. Esto tiene como objetivo hacer que Bash se comporte como un superconjunto estricto de ese estndar. Vea la Seccin 6.11 [El Modo POSIX de Bash] para una descripcin del modo POSIX de Bash.
--restricted

Hace la shell una shell restringida (vea la Seccin 6.10 [La Shell Restringida]).
--verbose

Equivalente a '-v'. Imprime lneas de entrada de shell conforme son ledas.


--version

Muestra informacin de versin para esta instancia de Bash en la salida estndar y sale con xito. Hay varias opciones de un nico carcter que se pueden suministrar en la invocacin y que no estn 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 parmetros posicionales, comenzando con $0 .
-i -l

Fuerza a la shell a ejecutarse de forma interactiva. Las shells interactivas se describen en la Seccin 6.3 [Shells Interactivas]. Hace que la shell acte como si hubiese sido invocada directamente por el inicio de sesin. Cuando la shell es interactiva, esto equivale a comenzar una shell de inicio de sesin con 'exec -l bash'. Cuando la shell no es interactiva, se ejecutarn los archivos de inicio de la shell de inicio de sesin. 'exec bash -l' o 'exec bash login' reemplazar a la shell actual con una shell de inicio de sesin de Bash. Vea la Seccin 6.2 [Archivos de Inicio de Bash], para una descripcin del comportamiento especial de una shell de inicio de sesin. Hace la shell de tipo restringido (vea la Seccin 6.10 [La Shell Restringida]). Si esta opcin est presente, o si no quedan argumentos tras el procesado de las opciones, se leen los comandos desde la entrada estndar. Esta opcin permite que se establezcan parmetros posicionales cuando se invoca una shell interactiva.

-r -s

Pgina 86

Captulo 6: Caractersticas de Bash

-D

Se imprime una lista de cadenas entre comillas dobles precedidas cada una de ellas por '$' en la salida estndar. Estas son cadenas que estn sujetas a traduccin de lenguaje cuando la localizacin actual no es C o POSIX (vea la Seccin 3.1.2.5 [Traduccin de Localizacines] , Esto implica la opcin '-n'; no se ejecutar ningn comando. La opcion_shopt es una de las opciones de shell aceptadas por el comando interno shopt (vea la Seccin 4.3.2 [El Comando Interno Shopt]). Si opcin_shopt est presente, '-O' establece el valor de dicha opcin; '+O' la elimina. Si no se suministra opcin_shopt, se imprimen en la salida estndar los nombres y valores de las opciones aceptadas por shopt . Si la opcin de invocacin es '+O' la salida se muestra en un formato que puede ser reutilizado como entrada.

[-+][opcion_shopt]

--

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 sesin es aquella cuyo primer carcter o argumento cero es '-', o aquella invocada con la opcin '--login'. Una shell interactiva es aquella iniciada sin argumentos que no sean opciones, a menos que se especifique '-s', sin especificar la opcin '-c', y aquellas cuya entrada y salida estn conectadas a un terminal (como se determina por isatty(3)), o aquella iniciada con la opcin '-i'. Vea la Seccin 6.3 [Shells Interactivas] para ms informacin. 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 Seccin 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 parmetros 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 guin de comandos. Si no se ejecutaron comandos el estado de salida es 0.

6.2.- Ficheros de Inicio de Bash


Esta seccin describe cmo ejecuta Bash sus ficheros de inicio. Si alguno de los archivos existe pero no puede ser ledo, Bash informa de un error. Las tildes se expanden en nombres de fichero como se describi anteriormente bajo Expansin de Tildes (vea la Seccin 3.5.2 [Expansin de Tildes]). Las shells interactivas se describen en la Seccin 6.3 [Shells Interactivas].

Invocado como una shell interactiva de inicio de sesin, o con '--login'


Cuando se invoca a Bash como una shell interactiva de inicio de sesin, o como una shell no interactiva con la opcin '--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
Pgina 87

Captulo 6: Caractersticas de Bash

exista y sea legible. La opcin '--noprofile' se puede utilizar al inicio de la shell para inhibir este comportamiento. Cuando una shell de inicio de sesin finaliza, Bash lee y ejecuta los comandos del archivo '~/.bash_logout', si este existe.

Invocado como una shell interactiva no de inicio de sesin


Cuando se inicia una shell interactiva que no es de inicio de sesin, Bash lee y ejecuta los comandos del archivo '~/bashrc', si dicho archivo existe. Este comportamiento puede inhibirse usando la opcin '--norc'. La opcin '--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 lnea
if [-f ~/.bashrc ]; then . ~/.bashrc; fi

despus (o antes) de cualquier inicializacin especfica del inicio de sesin.

Invocado de forma no interactiva.


Cuando Bash se inicia de forma no interactiva, para ejecutar un guin 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 ejecutara 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 opcin '--login', Bash intenta leer y ejecutar los comandos de los archivos de inicio de la shell de inicio de sesin.

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 tambin la conformidad con el estndar POSIX. Cuando se invoca como una shell interactiva de inicio de sesin, o como una shell no interactiva con la opcin '--login', primero intenta leer y ejecutar comandos de los archivos '/etc/profile' y '~/.profile', en ese orden. La opcin '--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 ningn otro archivo de inicio, la opcin '--rcfile' no tiene ningn efecto. Una shell no interactiva invocada con el nombre sh no intenta leer ningn otro archivo de inicio. Cuando se invoca como sh, Bash entra en el modo POSIX despus de leer los archivos de inicio.

Invocado en modo POSIX


Cuando Bash se inicia en modo POSIX, como con la opcin de lnea de comandos '--posix', este sigue el estndar 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
Pgina 88

Captulo 6: Caractersticas de Bash

expandido. No se lee ningn otro archivo de inicio.

Invocado por un demonio de shell remoto.


Bash intenta determinar cuando est siendo ejecutado con su entrada estndar conectada a una conexin 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 opcin '--norc' para inhibir este comportamiento, y la opcin '--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 opcin '-p' no se ha suministrado, no se lee ningn 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 opcin '-p' en la invocacin, 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 opcin, a menos que se especifique la opcin '-s', sin especificar la opcin '-c', y aquellas en las que la entrada y la salida de error estn ambas conectadas a terminales (como se determina por isatty(3)), o aquella que es iniciada con la opcin '-i'. Una shell interactiva generalmente lee desde y escribe hacia una terminal de usuario. La opcin de invocacin '-s' se puede utilizar para ajustar los parmetros posicionales cuando se inicia una shell interactiva.

6.3.2.- Es esta una shell Interactiva?


Para determinar cuando un guin de inicio est ejecutndose o no de forma interactiva, compruebe el valor del parmetro 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 establecida 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
Pgina 89

Captulo 6: Caractersticas de Bash

6.3.3.- Comportamiento de la Shell Interactiva


Cuando la shell se ejecuta interactivamente, esta cambia su comportamiento de varios modos. 1. Los archivos de inicio son ledos y ejecutados como se describe en la Seccin 6.2 [Ficheros de Inicio de Bash]. 2. El Control de Tareas (vea el Captulo 7 [Control de Tareas]) est habilitado por defecto. Cuando el control de tareas est teniendo efecto, Bash ignora las seales de control de tareas generadas por el teclado SIGTTIN, SIGTTOU y SIGTSTP. 3. Bash expande y muestra PS1 antes de leer la primera lnea de un comando, y expande y muestra el valor de PS2 antes de leer la segunda lnea y las siguientes de un comando multilnea. 4. Bash ejecuta el valor de la variable PROMPT_COMMAND como un comando antes de imprimir el prompt primario, $PS1 (vea la Seccin 5.2 [Variables de Bash]). 5. Se utiliza readline (vea el Captulo 8 [Edicin de la Lnea de Comandos]) para leer comandos desde el terminal de usuario. 6. Cuando est leyendo un comando Bash inspecciona el valor de la opcin ignoreof para set -o en vez de salir inmediatamente cuando recibe un EOF desde su entrada estndar. 7. La historia de comandos (vea la Seccin 9.1 [Las Caractersticas de Historia de Bash]) y la expansin de la historia (vea la Seccin 9.3 [Interaccionando con la Historia]) estn habilitadas 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 expansin de alias (vea la Seccin 6.6 [Alias]) se realiza por defecto. 9. En ausencia de cualquier trampa, Bash ignora la seal SIGTERM (vea la Seccin 3.7.6 [Seales]). 10. En ausencia de cualquier trampa, la seal SIGINT es capturada y manejada (vea la Seccin 3.7.6 [Seales]). SIGINT interrumpir algunos comandos internos de shell. 11. Una shell interactiva de inicio de sesin al finalizar enviar un SIGHUP a todas sus tareas si la opcin de shell huponexit est activada (vea la Seccin 3.7.6 [Seales]). 12. La opcin de invocacin '-n' se ignora, y 'set -n' no tiene ningn efecto (vea la Seccin 4.3.1 [El Comando Interno Set]). 13. Bash comprobar el correo peridicamente, dependiendo de los valores de las variables de shell MAIL , MAILPATH y MAILCHECK (vea la Seccin 5.2 [Variables de Bash]). 14. Los errores de expansin debidos a referencias a variables de shell no ligadas despus de que se haya activado 'set -u' no provocarn que la shell finalice (vea la Seccin 4.3.1 [El Comando Interno Set]). 15. La shell no finalizar en errores de expansin causados por una variable var no establecida o con valor nulo en expansiones de tipo ${var:?palabra} (vea la Seccin 3.5.3 [Expansin de Parmetros de Shell]). 16. Los errores de redireccin 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 Seccin 6.11 [El Modo POSIX de Bash]). 18. Un exec fallido no provocar que la shell finalice (vea la Seccin 4.1 [Comandos Internos de la Shell Bourne]).
Pgina 90

Captulo 6: Caractersticas de Bash

19. Los errores del analizador no provocarn que la shell finalice. 20. Las correcciones de deletreado nicas en argumentos directorio para el comando interno cd estn activadas por defecto (vea la descripcin de la opcin cdspell para el comando interno shopt en la Seccin 4.3.2 [El Comando Interno Shopt]). 21. La shell comprobar el valor de la variable TMOUT y finalizar si un comando no es ledo dentro del nmero de segundos especificado tras imprimir $PS1 (vea la Seccin 5.2 [Variables de Bash]).

6.4.- Expresiones Condicionales de Bash


Las 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. Tambin hay operadores de cadena y operadores de comparacin numrica. 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 lexicogrficamente usando la localizacin actual. A menos que se especifique lo contrario, las expresiones unarias que operan con ficheros siguen los enlaces simblicos y operan con el destino del enlace en vez de con el propio enlace.
-a fichero -b fichero -c fichero -d fichero -e fichero -f fichero -g fichero -h fichero -k fichero -p fichero -r fichero -s fichero -t fd -u fichero -w fichero -x fichero

Verdad (true) si el fichero existe. Verdad si el fichero existe y es un fichero especial de bloques. Verdad si el fichero existe y es un fichero especial de caracteres. Verdad si el fichero existe y es un directorio. Verdad si el fichero existe. Verdad si el fichero existe y es un fichero regular. Verdad si el fichero existe y su bit SGID est activado. Verdad si el fichero existe y es un enlace simblico. Verdad si el fichero existe y su bit pegajoso (sticky) est activado. Verdad si el fichero existe y es una tubera con nombre (FIFO). Verdad si el fichero existe y se puede leer. Verdad si el fichero existe y tiene un tamao mayor que cero. Verdad si el descriptor fd est abierto y se refiere a un terminal. Verdad si el fichero existe y su bit SUID est activado. Verdad si el fichero existe y se puede modificar. Verdad si el fichero existe y es ejecutable.
Pgina 91

Captulo 6: Caractersticas de Bash

-O fichero -G fichero -L fichero -S fichero -N fichero

Verdad si el fichero existe y su propietario es el UID efectivo. Verdad si el fichero existe y su grupo es el GID Verdad si el fichero existe y es un enlace simblico. Verdad si el fichero existe y es un socket. Verdad si el fichero existe y ha sido modificado desde que fuel ledo la ltima vez. Verdad si fichero1 es ms nuevo (de acuerdo con su fecha de modificacin)que fichero2, o si fichero1 existe y fichero2 no.

fichero1 -nt fichero2

fichero1 -ot fichero2

Verdad si fichero1 es ms viejo que fichero2, o si fichero2 existe y fichero1 no.


fichero1 -ef fichero2

Verdad si fichero1 y fichero2 referencian al mismo dispositivo y nmero de inodo.


-o nombreopt

Verdad si la opcin de shell nombreopt est activada. La lista de opciones aparece en la descripcin de la opcin '-o' del comando interno set (vea la Seccin 4.3.1 [El Comando Interno Set]). Verdad si la longitud de la cadena es cero Verdad si la longitud de la cadena es distinta de cero.

-z cadena -n cadena cadena

cadena1 == cadena2 cadena1 = cadena2

Verdad si las cadenas son iguales. Con los comandos test se debera usar '=' para cumplir con el estndar POSIX.
cadena1 != cadena2

Verdad si las cadenas no son iguales.


cadena1 < cadena2

Verdad si cadena1 se ordena lexicogrficamente antes que cadena2.


cadena1 > cadena2

Verdad si cadena1 se ordena lexicogrficamente despus de cadena2.

Pgina 92

Captulo 6: Caractersticas de Bash

arg1 OP arg2

OP es uno de los siguientes operadores: '-eq'. '-ne', '-lt'. '-le', '-gt' o '-ge'. Estos operadores de aritmtica 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.

6.5.- Aritmtica de la Shell.


La shell permite que las expresiones aritmticas sean evaluadas, como en la expansin de shell o mediante el comando interno let o el comando interno declare con la opcin '-i'. La evaluacin se hace en enteros de anchura fija sin comprobacin de desbordamiento, aunque la divisin por 0 es capturada y marcada como un error. Los operadores y sus precedencias, asociatividad 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 pre-incremento y pre-decremento de variables menos y ms unarios (positivo y negativo) negacin lgica y binaria exponenciacin multiplicacin, divisin, resto adicin, sustraccin 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 lgico (AND) o lgico (OR) operador condicional.

++id --id - + ! ~ ** * / % + << >> <= >= < > == != & ^ | && ||
expr ? expr : expr

= *= /= %= += -= <<= >>= &= ^= |= asignaciones


expr1 , expr2

coma

Las variables de shell pueden funcionar como operandos; se realiza expansin de parmetros antes de evaluar la expresin. Dentro de una expresin, las variables de shell pueden ser referenPgina 93

Captulo 6: Caractersticas de Bash

ciadas por un nombre sin usar la sintaxis de expansin de parmetros. Una variable de shell que sea nula o no est definida se evala a 0 cuando es referenciada por su nombre sin usar la sintaxis de expansin de parmetros. El valor de una variable se evala como una expresin aritmtica 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 evala a 0. Una variable de shell no necesita tener su atributo entero activado para ser usada en una expresin. Las constantes comenzando con un 0 se interpretan como nmeros en base octal. Un '0x' o '0X' al inicio indica un nmero en hexadecimal. De otro modo, los nmeros que tienen la forma [base#]n, donde base es un nmero decimal entre 2 y 64 representando la base aritmtica, y n es un nmero en esa base. Si se omite base#, entonces se utiliza la base 10. Los dgitos mayores que 9 se representan con letras minsculas, letras maysculas, '@' y '_' en ese orden. Si base es menor o igual a 36 las letras minsculas y maysculas pueden ser usadas indistintamente para representar los nmeros entre 10 y 35. Los operadores se evalan en el orden de precedencia. Primero se evalan las sub-expresiones entre parntesis; de esta forma se pueden sobreescribir las reglas de precedencia anteriores.

6.6.- Alias
Los alias permiten que una cadena sea sustituida por una palabra cuando esta se utiliza como la primera palabra de un comando simple. La shell mantiene una lista de alias que pueden ser establecidos 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 carcter entrecomillado listado anteriormente no pueden aparecer en un nombre de alias. El texto sustituido puede contener cualquier entrada de shell vlida, incluyendo metacaracteres de la shell. La primera palabra del texto reemplazado se comprueba en busca de alias, pero una palabra que sea idntica a un alias que est siendo expandido no es expandida por segunda vez. Esto significa que uno puede construir un alias ls que ejecute, por ejemplo, el comando ls -F, y Bash no intentar expandir recursivamente el texto reemplazado. Si el ltimo carcter del valor del alias es un espacio o un carcter tabulacin, entonces tambin se comprueba la siguiente palabra de comando que siga al alias en busca de expansin 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 funcin de shell (vea la Seccin 3.3 [Funciones de Shell]). Los alias no se expanden cuando la shell no es interactiva, a menos que se establezca la opcin de shell expand_aliases usando shopt (vea la Seccin 4.3.2 [El Comando Interno Shopt]). Las reglas concernientes a la definicin y uso de alias pueden ser algo confusas. Bash siempre lee al menos una lnea completa de la entrada antes de ejecutar cualquiera de los comandos de esa lnea. Los alias se expanden cuando se lee un comando, no cuando se ejecuta. De esta forma, una definicin de alias que aparezca en la misma lnea que otro comando no tendr efecto hasta que se lea la siguiente lnea de la entrada. Los comandos que siguen a la definicin del alias en esa lnea no se ven afectados por el nuevo alias. Este comportamiento es tambin un problema cuando se ejecutan funciones. Los alias se expanden cuando se lee una definicin de funcin, no cuando se ejecuta la funcin, puesto que una definicin de funcin es por s misma un comando compuesto.
Pgina 94

Captulo 6: Caractersticas de Bash

Como consecuencia, los alias definidos en una funcin no estn disponibles hasta despus de que se ejecute dicha funcin. Para estar seguros, ponga siempre las definiciones de alias en una lnea separada, y no use alias en comandos compuestos. Para casi cualquier propsito, se prefiere las funciones de shell sobre los alias.

6.7.- Arrays
Bash proporciona variables de tipo array unidimensional indexado y de tipo array asociativo. Cualquier variable se puede utilizar como un array indexado; el comando interno declare declarar explcitamente un array. No hay un lmite mximo al tamao de un array, ni ninguna obligacin de que los miembros sean indexados o asignados contiguamente. Los arrays indexados se referencian usando enteros, incluyendo expresiones aritmticas (vea la Seccin 6.5 [Aritmtica de la Shell]) y comienzan con el ndice cero; los arrays asociativos utilizan cadenas arbitrarias. Se crea automticamente un array indexado si se asigna alguna variable usando la sintaxis:
nombre[ndice]=valor

El ndice se trata como una expresin aritmtica que debe ser evaluada a un nmero mayor o igual que cero. Para declarar un array de forma explcita utilice:
declare -a nombre

La sintaxis
declare -a nombre[ndice]

tambin es vlida; el ndice se ignora Los arrays asociativos se declaran usando


declare -A nombre

Se pueden especificar atributos para una variable de tipo array usando los comandos internos declare y readonly. Cada atributo se aplica a todos los miembros de un array. Los arrays se pueden asignar en asignaciones compuestas de la forma:
nombre=(valor1 valor2 valorn)

donde cada valor es de la forma [ndice]=cadena. Las asignaciones a arrays indexados no requieren los corchetes ni el ndice. Cuando se asigna a arrays indexados, si se suministra el ndice opcional, el valor es asignado a ese ndice; en caso contrario el elemento es asignado al ltimo ndice asignado por la sentencia ms uno. Los ndices comienzan en el cero. Cuando se asigna a un array asociativo, el ndice es obligatorio. Esta sintaxis tambin se puede usar con el comando interno declare. Los elementos individuales del array pueden ser asignados usando la sintaxis nombre[ndice]=valor introducida anteriormente. Cualquier elemento de un array puede ser referenciado usando ${nombre[ndice]} . Las llaves son obligatorias para evitar conflictos con los operadores de expansin 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 slo 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 carcter 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[@]}
Pgina 95

Captulo 6: Caractersticas de Bash

no se expande a nada. Si la expansin entre dobles comillas ocurre dentro de una palabra, la expansin del primer parmetro se une con la primera parte de la palabra original, y la expansin del ltimo parmetro se une con la ltima parte de la palabra original. Esto es similar a la expansin de los parmetros especiales '@' y '*'. ${#nombre[ndice]} se expande a la longitud de $ {nombre[ndice]}. Si el ndice es '@' o '*', la expansin es el nmero de elementos en el array. Referenciar una variable de tipo array sin un ndice es equivalente a referenciar al ndice 0. Se considera que una variable de tipo array est establecida si alguno de los ndices tiene asignado un valor. La cadena nula es un valor vlido. 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 expansin de nombres de fichero, unset nombre, donde nombre es un array, elimina el array completo. Un ndice de '@' o '*' tambin elimina el array completo. Cada uno de los comandos internos declare, local y readonly aceptan una opcin '-a' para especificar un array indexado y una opcin '-A' para especificar un array asociativo. El comando interno read acepta una opcin '-a' para asignar una lista de palabras ledas desde la entrada estndar a un array, y puede leer valores desde la entrada estndar 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 Directorios


La pila de directorios es una lista con los directorios visitados recientemente. El comando interno pushd aade directorios a la pila y cambia el directorio actual por el ltimo directorio aadido 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 tambin es visible mediante el valor de la variable de shell DIRSTACK.

6.8.1.- Comandos Internos de la Pila de Directorios


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

Muestra la lista de directorios almacenados actualmente. Los directorios se aaden 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. Muestra el n-simo directorio (contando desde la derecha de la lista imprimida por dirs cuando es invocado sin opciones), empezando desde cero. Limpia la pila de directorios eliminando todos los elementos.

-N

-c

Pgina 96

Captulo 6: Caractersticas de Bash

-l -p -v

Produce un listado largo; el formato de listado por defecto utiliza una tilde para denotar el directorio home. Produce que dirs imprima la pila de directorios con una entrada por lnea Produce que dirs imprima la pila de directorios con una entrada por lnea, prefijando cada entrada con su ndice en la pila.
popd [+N | -N] [-n]

popd

Elimina la entrada de la cima de la pila de directorios, y realiza un cd al nuevo directorio de dicha cima. Cuando no se dan argumentos, popd elimina el directorio de la cima de la pila y realiza un cd al nuevo directorio de la cima de la pila. Los elementos se numeran desde 0 comenzando en el primer directorio listado con dirs; por ejemplo, popd es equivalente a popd +0.
+N -N -n

Elimina el n-simo directorio (contando desde la izquierda de la lista imprimida por dirs), comenzando con cero. Elimina el n-simo directorio (contando desde la derecha de la lista imprimida por dirs), comenzando con cero. Suprime el cambio de directorio habitual cuando se remueven directorios desde la pila, de forma que slo se manipula la pila.
pushd [-n] [+N | -N | dir ]

pushd

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 +N -N dir

Suprime el cambio de directorio habitual cuando se aaden directorios a la pila, de forma que slo se manipula la pila. Lleva al n-simo directorio (contando desde la izquierda de la lista imprimida por dirs, comenzando con cero) a la cima de la lista rotando la pila. Lleva el n-simo directorio (contando desde la derecha de la lista imprimida por dirs, comenzando con cero) a la cima de la lista rotando la pila. 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 Prompt


Se 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 lnea de comandos. Adicionalmente, la tabla siguiente describe los caracteres especiales que pueden aparecer en las
Pgina 97

Captulo 6: Caractersticas de Bash

variables de prompt: \a \d Un carcter campana. La fecha, en formato Da de la semana Mes Da del mes (por ejemplo Tue May 26). El formato se pasa a strftime(3) y el resultado se inserta en la cadena del prompt; un formato vaco resulta en una representacin de tiempo especfica de la localizacin. Las llaves son obligatorias. \e \h \H \j \l \n \r \s \t \T \@ \A \u \v \V \w \W \! \# \$ \nnn \\ Un carcter de escape. El nombre de anfitrin (host), hasta el primer '.'. El nombre de anfitrin. El nmero de tareas manejadas actualmente por la shell. El nombre base de del dispositivo terminal de la shell. Una nueva lnea. Un retorno del carro. El nombre de la shell, el nombre base de $0 (la parte que sigue a la ltima barra inclinada). La hora, en formato de 24 horas HH:MM:SS. La hora, en formato de 12 horas HH:MM:SS. La hora, en formato de 12 horas am/pm. La hora, en formato de 24 horas HH:MM. El nombre de usuario del usuario actual. La versin de Bash (por ejemplo, 2.00) La distribucin de Bash, la versin + el nivel de parcheo (por ejemplo 2.00.0). El directorio de trabajo actual, con $HOME abreviado con una tilde (utiliza la variable $PROMPT_DIRTIRM ). El nombre base de $PWD, con $HOME abreviado con una tilde. El nmero de historia de este comando. El nmero de comando de este comando. Si el uid efectivo es 0, #, en caso contrario $. El carcter cuyo cdigo ASCII coincide con el valor octal nnn. Una barra invertida.

\D{formato}

Pgina 98

Captulo 6: Caractersticas de Bash

\[ \]

Comienza una secuencia de caracteres no imprimibles. Esto puede usarse para introducir una secuencia de control del terminal dentro del prompt. Finaliza una secuencia de caracteres no imprimibles.

El nmero de comando y el nmero de historia normalmente son diferentes: el nmero de historia de un comando es su posicin en la lista de historia, la cual puede incluir comandos restaurados desde el archivo de historia (vea la Seccin 9.1 [Caractersticas de Historia de Bash]), mientras que el nmero de comando es la posicin en la secuencia de comandos ejecutados durante la sesin de shell actual. Despus de que la cadena sea decodificada, esta se expande mediante expansin de parmetros, sustitucin de comandos, expansin aritmtica y eliminacin de entrecomillado obedeciendo al valor de la opcin de shell promptvars (vea la Seccin 4.2 [Comandos Internos de Bash]).

6.10.- La Shell Restringida


Si Bash se inicia con el nombre rbash, o se suministran las opciones '--restricted' o '-r' en la invocacin, la shell se convierte en restringida. Una shell restringida se utiliza para establecer un entorno ms controlado que la shell estndar. Una shell restringida se comporta de forma idntica a bash exceptuando los apartados siguientes que estn 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 opcin '-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 redireccin '>', '>|', '<>', '>&', '&>' y '>>'. Usar el comando interno exec para reemplazar la shell con algn otro comando. Aadir 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 opcin '-p' para el comando interno command. Desactivar el modo restringido con 'set +r' o 'set +o restricted' Estas restricciones se imponen despus de leer cualquier archivo de inicio. Cuando se ejecuta un comando que es un guin de shell (vea la Seccin 3.8 [Guiones de Shell]), rbash desactiva cualquier restriccin en la shell que se origina para ejecutar el guin.

6.11.- El Modo POSIX de Bash


Iniciar Bash con la opcin de la lnea de comandos ' --posix' o ejecutando 'set -o posix' mientras Bash se est ejecutando, producir que Bash se ajuste al estndar 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.
Pgina 99

Captulo 6: Caractersticas de Bash

Cuando se invoca como sh, Bash entra en el modo POSIX tras leer los archivos de inicio. A continuacin 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 localizacin. Esto tambin es posible con 'shopt -s checkhash'. 2. El mensaje imprimido por el cdigo 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 cdigo de control de tareas y los comandos internos cuando se detiene una tarea es 'Detenido(nombreSeal)', donde nombreSeal 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 indicacin de si la tarea es la actual o la anterior. 5. Las palabras reservadas que aparecen en un contexto donde se reconocen palabras reservadas no sufren expansin de alias. 6. En PS1 y PS2 las expansiones POSIX de '!' para el nmero de historia y '!!' para '!' estn activadas, y la expansin de parmetros se realiza en los valores de PS1 y PS2 a pesar de los ajustes de la opcin promptvars. 7. Se ejecutan los ficheros de inicio de POSIX ($ENV ) en vez de los ficheros de inicio de Bash. 8. La expansin de tildes se realiza slo en asignaciones que precedan a un nombre de comando, en vez de en todas las sentencias de asignacin de la lnea. 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 seal en una nica lnea, separadas por espacios sin el prefijo 'SIG'. 11. El comando interno kill no acepta nombres de seal 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 expansin aritmtica resulta en una expresin invlida. 14. Los operadores de redireccin no realizan expansin de nombres de fichero en la palabra en la redireccin a menos que la shell sea interactiva. 15. Los operadores de redireccin no realizan separacin de palabras en la palabra en la redireccin. 16. Los nombres de funciones deben ser nombres vlidos para la shell. Esto es, estos no pueden contener caracteres distintos de letras, dgitos y caracteres de subrayado, y no pueden comenzar con un dgito. Declarar una funcin con un nombre invlido 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 bsqueda 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 estndar POSIX, e incluye cosas como pasar opciones incorrectas, errores de redireccin, errores en la asignacin de variables para asignaciones que preceden a un nombre de comandos y algunas ms.
Pgina 100

Captulo 6: Caractersticas de Bash

19. Si CDPATH est establecida, el comando interno cd no aadir implcitamente el directorio actual al valor de esta variable. Esto significa que cd fallar si no se puede construir ningn nombre de directorio vlido 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 asignacin de variables cuando no hay ningn nombre de comando que siga a las sentencias de asignacin. Un error de asignacin de variables se produce, por ejemplo, cuando se intenta asignar un valor a una variable de slo lectura. 21. Una shell no interactiva finalizar con un estado de error si la variable de iteracin en una sentencia for o la variable de seleccin en una sentencia select es una variable de slo lectura. 22. La sustitucin de procesos no est disponible. 23. Las sentencias de asignacin que precedan a los comandos internos especiales POSIX se mantienen en el entorno de shell despus de que el comando interno finalice. 24. Las sentencias de asignacin que precedan a las llamadas a funciones de shell se mantienen en el entorno de la shell despus de que la funcin 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 seal sin el prefijo SIG. 27. El comando interno trap no comprueba el primer argumento para una posible especificacin de seal ni revierte el manejo de seales a la disposicin original si lo es, a menos que el argumento consista nicamente en dgitos y sea un nmero de seal vlido. Si los usuarios quieren restablecer el manejador para una seal dada a la disposicin 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 opcin '-e' desde el padre de la shell. Cuando no se encuentra en modo POSIX, Bash limpia la opcin '-e' en tales subshells. 30. La expansin 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 opcin '-p'. 32. Cuando se invoca al comando interno set sin opciones, este no muestra los nombres de funcin 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 lgico, 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 fsico. 35. Cuando se suministra la opcin '-P' para el comando interno pwd, este restablece el valor de
Pgina 101

Captulo 6: Caractersticas de Bash

$PWD a una ruta que no contiene enlaces simblicos. 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 suministrndole la opcin '-P'. 37. Cuando lista la historia, el comando interno fc no incluye una indicacin 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 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 edicin de vi invocar al editor vi directamente cuando se ejecuta el comando, en vez de comprobar los valores de $VISUAL y $EDITOR. 41. Cuando la opcin xpg_echo est establecida, Bash no intentar interpretar ningn argumento para echo como una opcin. Cada argumento se muestra, despus de tranformar los caracteres escapados. 42. El comando interno ulimit utiliza un tamao 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 interrumpe 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. Especficamente: 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 ms arriba, Bash requiere que la opcin xpg_echo est activada para que el comando interno echo se comporte completamente conforme al estndar POSIX. Se puede configurar Bash para ser conforme a POSIX por defecto, especificando la opcin '--enable-strict-posix-default' a configure cuando se construye (vea la Seccin 10.8 [Caractersticas Opcionales])

Pgina 102

Captulo 7: Control de tareas

7.- Control de Tareas


Este captulo describe qu es el control de tareas, cmo trabaja, y cmo le permite Bash acceder a estas caractersticas.

7.1.- Fundamentos del Control de Tareas


El control de tareas se refiere a la habilidad de detener (suspender) selectivamente la ejecucin de procesos y continuar (resumir) su ejecucin en un momento posterior. Un usuario normalmente emplea estas caractersticas a travs 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 tubera. Esta mantiene una tabla de tareas actualmente en ejecucin, la cual se puede listar con el comando jobs. Cuando Bash inicia una tarea asncronamente, este imprime una lnea como la siguiente: [1] 25647 indicando que esta es la tarea nmero 1 y que el ID de proceso del ltimo proceso en la tubera asociada con esta tarea es 25647. Todos los procesos en una tubera simple son miembros de la misma tarea. Bash usa la abstraccin de tarea como el fundamento para el control de tareas. Para facilitar la implementacin de la interfaz de usuario para el control de tareas, el sistema operativo mantiene la nocin 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 seales generadas por el teclado como SIGINT. Estos procesos se dice que estn 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 seales generadas por el teclado. Slo 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 recibirn una seal 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 caractersticas para usarlas. Escribir el carcter de suspensin (normalmente '^Z', ControlZ) durante la ejecucin de un proceso produce que el proceso se detenga y devuelva el control a Bash. Escribir el carcter de suspensin 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 carcter ' %' introduce una especificacin de tarea (espectarea). Se puede referenciar al nmero de tarea n mediante '%n '. Los smbolos '%% ' y '%+' se refieren a la nocin 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) tambin se refiere a la tarea actual. La tarea anterior puede ser referenciada utilizando ' %-'. Si slo
Pgina 103

Captulo 7: Control de tareas

hay una nica tarea se puede usar tanto '%+' como '%-' para referirse a esa tarea. En salidas pertenecientes a tareas (p.e., la salida del comando jobs), la tarea actual siempre se marca con un '+', y la tarea previa con un '-'. Tambin se puede referenciar a una tarea utilizando un prefijo del nombre usado para iniciarla, o usando una subcadena que aparezca en su lnea 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 lnea de comandos. Si el prefijo o la subcadena concuerda con ms 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 sinnimo para 'fg %1', llevando la tarea 1 desde un segundo plano hasta el primer plano. De forma similar, '%1 &' contina 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 opcin ' -b' del comando interno set, Bash informa de tales cambios inmediatamente (vea la Seccin 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 ejecutndose, si la opcin checkjobs est activada (vea la Seccin 4.3.2 [El Comando Interno Shopt]), la shell imprime un mensaje de advertencia, y, si la opcin 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 ningn comando, Bash no imprimir ms advertencias, y cualquier tarea suspendida ser finalizada.

7.2.- Comandos Internos para el Control de Tareas


bg bg [espectarea ]

Contina 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.
fg fg [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 vlida o especifica una tarea que fue iniciada sin el control de tareas.
jobs jobs [-lnprs] [espectarea] jobs -x comando [argumentos]

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

Captulo 7: Control de tareas

-l -n -p -r -s

Lista los IDs de los procesos junto con la informacin habitual. Muestra informacin nicamente sobre las tareas que han cambiado su estado desde la ltima vez que el usuario fue notificado de su estado. Lista slo los IDs de proceso del lder del grupo de procesos de la tarea. Restringe la salida a las tareas en ejecucin Restringe la salida a las tareas detenidas.

Si se da espectarea, la salida se restringe a la informacin correspondiente a esa tarea. Si no se suministra espectarea se lista el estado de todas las tareas. Si se suministra la opcin '-x' las tareas reemplaza cualquier espectarea encontrado en comando o argumentos con el correspondiente ID del grupo de procesos, y ejecuta el comando pasndole argumentos y retornando su estado de salida.
kill kill [-s especseal] [-n numseal] [-especseal] espectarea o pid kill -l [estado_de_salida] Enva una seal especificada por especseal o numseal al proceso identificado mediante la especificacin de tarea espectarea o el ID de proceso pid. especseal es o bien un nombre de seal que no diferencia entre maysculas y minsculas como SIGINT (con o sin el prefijo SIG) o un nmero de seal. Si especseal y numseal no estn presentes se utiliza SIGTERM. La opcin '-l' lista los nombres de seal. Si se proporciona algn argumento con la opcin '-l' se listan los nombres de las seales que se corresponden con los argumentos, y el estado de retorno es cero. El estado_de_salida

es un nmero que especifica un nmero de seal o el estado de salida de un proceso terminado por una seal. El estado de retorno es cero si al menos se envi correctamente una de las sealas y distinto de cero si ocurri algn error o se encontr una opcin invlida.
wait wait [espectarea o pid ]

Espera hasta que le proceso hijo especificado por cada ID de proceso pid o especificacin de tarea espectarea finaliza y devuelve el estado de salida del ltimo comando por el que se ha esperado. Si se da una especificacin 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 ningn espectarea o pid especifica un proceso activo que sea hijo de la shell el estado de retorno es 127.
disown disown [-ar] [-h] [espectarea ] Sin opciones se elimina cada espectarea de la tabla de tareas activas. Si se da la opcin '-h' la tarea no es eliminada de la tabla, pero se marca de forma que no se enva la seal SIGHUP a la tarea si la shell recibe un SIGHUP. Si espectarea no est presente y no se
Pgina 105

Captulo 7: Control de tareas

suministran las opciones '-a' o '-r', se utiliza la tarea actual. Si no se suministra espectarea la opcin '-a' significa eliminar o marcar todas las tareas; la opcin '-r' sin un argumento espectarea restringe la operacin a las tareas en ejecucin.
suspend suspend [-f]

Suspende la ejecucin de esta shell hasta que esta recibe una seal SIGCONT. Una shell de inicio de sesin no puede ser suspendida; se puede usar la opcin '-f' para sobreescribir este comportamiento y forzar la suspensin. 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 Tareas


auto_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 ambigedades; si hay ms de una tarea que comience con la cadena introducida, entonces se seleccionar la tarea a la que se accedi ms recientemente. El nombre de una tarea detenida, en este contexto, es la lnea 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 anloga a la ID de tarea '%? ' (vea la Seccin 7.1 [Fundamentos del Control de Tareas]). Si se establece a algn otro valor, la cadena suministrada debe ser un prefijo del nombre de una tarea detenida; esto proporciona una funcionalidad anloga al ID de tarea '% '.

Pgina 106

Captulo 8: Edicin de la lnea de comandos

8.- Edicin de la Lnea de Comandos


Este captulo describe las caractersticas bsicas de la interfaz de edicin de la lnea de comandos de GNU. La edicin de la lnea de comandos se proporciona mediante la librera Readline, la cual es usada por varios programas, incluyendo Bash. La edicin de la lnea de comandos est activada por defecto cuando se utiliza una shell interactiva, a menos que en la invocacin de la shell se suministre la opcin '--noediting'. La edicin de la lnea de comandos tambin se utiliza cuando se suministra la opcin '-e' al comando interno read (vea la Seccin 4.2 [Comandos Internos de Bash]). Por defecto, la edicin de la lnea de comandos es similar a la de emacs. Tambin est disponible una interfaz de edicin de la lnea de comandos estilo vi. La edicin de la lnea de comandos se puede activar en cualquier momento usando las opciones '-o emacs' o '-o vi' del comando interno set (vea la Seccin 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.- Introduccin a la Edicin de la Lnea de Comandos.


Los siguientes prrafos describen la notacin usada para representar las pulsaciones de teclas. El texto C-k se lee como 'Control-K' y describe el carcter 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 carcter producido cuando se mantiene presionada 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 tambin configurarse para ser usada como tecla Meta o puede ser configurada como algn otro modificador, tal como una tecla de composicin 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 combinacin de teclas pulsando primero la tecla ESC y a continuacin 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 carcter 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 iniciacin (vea la Seccin 8.3 [Fichero de Iniciacin de Readline]). Si su teclado carece de una tecla LFD, teclear C-j producir ese carcter. La tecla RET puede ser etiquetada como Return o Enter en algunos teclados.

8.2.- Interaccin con Readline


En ocasiones durante una sesin interactiva, usted puede introducir una enorme lnea de texto, para justo al final descubrir que la primera palabra de la lnea est mal deletreada. La librera Readline le proporciona un conjunto de comandos para manipular el texto que introduce con el teclado, permitindole simplemente corregir su errata, sin verse forzado a reescribir la mayor parte de la lnea. Usando estos comandos de edicin, usted puede mover el cursor al lugar que necesita la correccin
1 En ingls metafying the k key Pgina 107

Captulo 8: Edicin de la lnea de comandos

y borrar o insertar el texto de las correcciones. Luego, cuando est satisfecho con la lnea introducida, slo tendr que pulsar la tecla RET. No necesita estar al final de la lnea para presionar RET; se acepta la lnea completa independientemente de la localizacin del cursor.

8.2.1.- Los Fundamentos de Readline al Desnudo


Para introducir caracteres en la lnea lo nico que debe hacer es teclearlos. Los caracteres introducidos aparecen donde est el cursor, y a continuacin el cursor se desplaza un espacio hacia la derecha. Si teclea incorrectamente un carcter, puede usar el carcter de borrado para volver hacia atrs y borrar el carcter errneo. En ocasiones puede teclear un carcter incorrecto, y no percatarse del error hasta que ha introducido varios caracteres adicionales. En este caso, puede teclear C-b para mover el cursor hacia la izquierda, y entonces corregir su error. A continuacin puede mover el cursor hacia la derecha con C-f. Cuando introduzca texto en medio de una lnea, 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 detrs del cursor, los caracteres a la derecha del cursor son arrastrados para rellenar el espacio vaco creado por la eliminacin del texto. A continuacin se proporciona una lista de los fundamentos de la edicin de texto en una lnea de entrada.
C-b C-f

Retrocede un carcter. Avanza un carcter. Borra el carcter a la izquierda del cursor.

DEL o tecla de retroceso


C-d

Borra el carcter bajo el cursor. Inserta el carcter en la posicin del cursor.

Caracteres imprimibles
C-_ o C-x C-u

Deshace el ltimo comando de edicin. Puede deshacer todo lo hecho hasta volver a la lnea vaca inicial. (Dependiendo de la configuracin, la tecla de retroceso borra el carcter a la izquierda del cursor y la tecla DEL borra el carcter bajo el cursor, como C-d, en vez del carcter a la izquierda del cursor).

8.2.2.- Comandos de Movimiento de Readline


La tabla siguiente describe las pulsaciones de teclas ms fundamentales para editar la lnea de entrada. Para su comodidad, se han aadido muchos otros comandos adems de C-b, C-f, C-d y DEL. Aqu se dan algunos comandos para moverse ms rpidamente por la lnea de comandos.
C-a C-e

Se desplaza al principio de la lnea. Se desplaza al final de la lnea.

Pgina 108

Captulo 8: Edicin de la lnea de comandos

M-f M-b

Se desplaza una palabra hacia adelante, cuando la palabra est compuesta de letras y dgitos Se desplaza una palabra hacia atrs. Limpia la pantalla, reimprimiendo la lnea actual en la parte superior de la pantalla.

C-l

Advierta cmo C-f desplaza un carcter hacia adelante, mientras que M-f desplaza una palabra hacia delante. Es una amplia costumbre que las teclas rpidas con Control trabajen con caracteres mientras que las teclas rpidas con Meta trabajan con palabras.

8.2.3.- Comandos para cortar texto de Readline


Cortar texto significa borrar el texto de la lnea, pero guardarlo para uso posterior, normalmente volviendo a reinsertar este texto en otro lugar de la lnea. Si la descripcin 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 nmero 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 especfico de la lnea; el texto que corta en una lnea introducida previamente est disponible para ser pegado nuevamente ms tarde, cuando est introduciendo cualquier otra lnea. A continuacin le damos una lista de los comandos para cortar texto.
C-k M-d

Corta el texto desde la posicin actual del cursor hasta el final de la lnea. Corta el texto desde el cursor hasta el final de la palabra actual, o, si se encuentra entre palabras, hasta el final de la prxima palabra. Los lmites de palabra son los mismos que los usados por M-f Corta desde el cursor hasta el comienzo de la palabra actual, o, si se encuentra entre palabras, al comienzo de la palabra previa. Los lmites de palabras son los mismos que los usados con M-b. Corta desde el cursor hasta el espacio en blanco previo. Este se diferencia de M-DEL en que los lmites de palabra son diferentes.

M-DEL

C-w

A continuacin indicamos cmo se pega nuevamente el texto en la lnea. Pegar significa copiar el texto ms recientemente cortado desde el buffer de corte.
C-y M-y

Pega el texto ms recientemente cortado nuevamente en la posicin del cursor. 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 Readline


Usted puede pasar argumentos numricos a los comandos de Readline. En ocasiones los argumentos actan como un contador de repeticiones, otras veces estos son el signo del argumento que es significativo. Si introduce un argumento negativo a un comando que normalmente acta hacia adelante, ese comando actuar hacia atrs. Por ejemplo, para cortar texto hacia atrs hasta el comienzo de la
Pgina 109

Captulo 8: Edicin de la lnea de comandos

lnea, puede teclear 'M-- C-k'. La forma general de pasar argumentos numricos a un comando es introducir meta dgitos antes del comando. Si el primer 'dgito' tecleado es un signo menos ('-'), entonces el signo del argumento ser negativo. Una vez que haya tecleado un meta dgito para comenzar el argumento, puede teclear el resto de los dgitos, y finalmente el comando. Por ejemplo, para darle al comando C-d un argumento de 10, podra teclear 'M-1 0 C-d', que borrar los siguientes 10 caracteres de la lnea de entrada.

8.2.5.- Buscando Comandos en la Historia


Readline proporciona comandos para buscar a travs de la historia de comandos (vea la Seccin 9.1 [Caractersticas de Historia de Bash]) a aquellas lneas que contengan una cadena especificada. Hay dos modos de bsqueda: incremental y no incremental. Las bsquedas incrementales comienzan antes de que el usuario haya finalizado de teclear la cadena de bsqueda. Cada vez que se teclea un carcter de la cadena de bsqueda, Readline muestra la siguiente entrada de la historia que concuerda con la cadena tecleada hasta el momento. Una bsqueda incremental requiere slo tantos caracteres como se necesite para encontrar la entrada deseada de la historia. Para buscar hacia atrs 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 bsqueda incremental. Si esa variable no tiene asignado ningn valor, los caracteres ESC y C-J finalizarn la bsqueda incremental. C-g abortar una bsqueda incremental y restaura la lnea original. Cuando la bsqueda termina, la entrada de la historia que contenga la cadena buscada se convierte en la lnea actual. Para encontrar otras entradas coincidentes en la lista de historia, teclee C-r o C-s, lo que sea ms apropiado. Esto buscar hacia atrs 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 bsqueda y ejecutar ese comando. Por ejemplo, un RET terminar la bsqueda y aceptar la lnea, ejecutando el comando de la lista de historia. Un comando de movimiento terminar la bsqueda, har que la ltima lnea encontrada sea la lnea actual y comenzar la edicin. Readline recuerda la ltima cadena de bsqueda incremental. Si se teclean dos C-rs sin que intervengan caracteres que definan una nueva cadena de bsqueda, se utilizar cualquier cadena de bsqueda almacenada. Las bsquedas no incrementales leen la cadena de bsqueda completa antes de comenzar a buscar las lneas de historia que concuerden. La cadena de bsqueda puede ser tecleada por el usuario o ser parte del contenido de la lnea actual.

8.3.- El Fichero de Inicializacin de Readline


Aunque la librera Readline viene con un juego de teclas rpidas tipo emacs instaladas por defecto, es posible usar un juego diferente de teclas rpidas. 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 ledo, el archivo por defecto en ltima instancia es '/etc/inputrc'.
Pgina 110

Captulo 8: Edicin de la lnea de comandos

Cuando comienza un programa que utiliza la librera Readline, se lee el fichero de inicializacin y se establecen las asociaciones de teclas. Adicionalmente el comando C-x C-r relee este archivo de inicializacin, de forma que incorpore cualquier cambio que haya podido realizar en l.

8.3.1.- La Sintaxis del Fichero de Inicializacin de Readline


Tan slo existen unas pocas construcciones fundamentales permitidas en el archivo de inicializacin de Readline. Las lneas en blanco son ignoradas. Las lneas que comienzan con un '#' son comentarios. Las lneas que comienzan con un '$' indican construcciones condicionales (vea la Seccin 8.3.2 [Construcciones de Inicializacin Condicionales]). Otras lneas indican definicin de variables y asociaciones de teclas. Definicin de variables Usted puede modificar el comportamiento de ejecucin de Readline modificando los valores de las variables en Readline usando el comando set dentro del fichero de inicializacin. La sintaxis es simple:
set variable valor

A continuacin, por ejemplo, se muestra cmo cambiar desde las asociaciones de teclas por defecto tipo emacs a usar los comandos de edicin de lneas tipo vi.
set editing-mode vi

Los nombres y valores de las variables, cuando corresponde, se reconocen sin diferenciar entre maysculas y minsculas. 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 vaco, on (sin distinguir maysculas y minsculas), 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 Seccin 4.2 [Comandos Internos de Bash]. Se puede modificar gran parte del comportamiento de ejecucin de Readline con las siguientes variables:
bell-style

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

Si est activada ('on'), Readline intentar enlazar los caracteres de control tratados de forma especial por el driver de terminal del kernel con los equivalentes de Readline.
comment-begin

Es la cadena a insertar al comienzo de la lnea cuando se ejecuta el comando insert-comment. El valor por defecto es #.
Pgina 111

Captulo 8: Edicin de la lnea de comandos

completion-ignore-case

Si est establecida en 'on', Readline realiza la concordancia y el completado de nombres de fichero de forma no sensible a maysculas y minsculas. El valor por defecto es 'off'.
completion-prefix-display-length

La longitud en caracteres del prefijo comn de una lista de completados posibles que se muestra sin modificacin. Cuando se establece a un valor mayor que cero, los prefijos comunes ms largos que este valor son reemplazados con una elipsis cuando se muestran los completados posibles.
completion-query-items

El nmero de completados posibles que determina cuando se debe consultar al usuario si mostrar o no la lista de posibilidades. Si el nmero de completados posibles es mayor que este valor, Readline preguntar al usuario si desea verlos o no; en caso contrario sern simplemente listados. Esta variable debe ser establecida a un valor entero mayor o igual que cero. Un valor negativo significa que Readline nunca debera preguntar. El lmite por defecto es 100.
convert-meta

Si 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 carcter ESC, de forma que los convierta en una secuencia de teclas meta-prefijadas. El valor por defecto es 'on'.
disable-completion

Si est establecida en 'on'. Readline inhibir el completado de palabras. Los caracteres de completado sern insertados en la lnea como si hubieran sido mapeados para auto-insertarse. El valor por defecto es 'off'.
editing-mode

La variable editing-mode controla qu conjunto de teclas rpidas por defecto se utiliza. Por defecto, Readline comienza en el modo de edicin de Emacs, donde la mayora de las teclas rpidas son similares a las de Emacs. Esta variable puede tener el valor 'emacs' o 'vi'.
echo-control-characters

Cuando est establecida en 'on' en sistemas operativos que indican que lo soportan, Readline mostrar un carcter correspondiente a una seal generada desde el teclado. El valor por defecto es 'on'.
enable-keypad

Cuando est establecida en 'on'. Readline intentar activar el teclado de la aplicacin cuando sea llamado. Algunos sistemas necesitan esto para activar las teclas de cursor (flechas). El valor por defecto es 'off'.
enable-meta-key

Cuando est establecida en 'on'. Readline intentar activar cualquier tecla


Pgina 112

Captulo 8: Edicin de la lnea de comandos

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

Si est establecida en 'on' se realizar expansin de tildes cuando Readline intente completar palabras. El valor por defecto es 'off'.
history-preserve-point

Si est establecida en 'on' el cdigo de historia intentar situar el puntero (la posicin actual del cursor) en la misma localizacin en cada lnea de historia obtenida con previus-history o next-history. El valor por defecto es 'off'.
history-size

Establece el mximo nmero de entradas de historia guardadas en la lista de historia. Si se establece a cero, el nmero de entradas en la lista de historia no est limitada.
horizontal-scroll-mode

Esta variable puede ser establecida a 'on' o 'off', Establecerla a 'on' significa que el texto de las lneas que estn siendo editadas se desplazar horizontalmente en una nica lnea de pantalla cuando estas sean ms largas que la anchura de la pantalla, en vez de descender a una nueva lnea de pantalla. Por defecto, esta variable est establecida a 'off'.
input-meta

Si 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 sinnimo para esta variable.
isearch-terminators

La cadena de caracteres que debera terminar una bsqueda incremental sin ejecutar posteriormente el carcter como un comando (vea la Seccin 8.2.5 [Busquedas]). Si esta variable no tiene un valor asignado, los caracteres ESC y C-J terminarn la bsqueda incremental.
keymap

Establece la idea de Readline del mapa de teclas actual para los comandos de asociacin 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 tambin afecta al mapa de teclas por defecto.
mark-directories

Si est establecida a 'on', los nombres de directorio completados terminarn con una barra inclinada. El valor por defecto es 'on'.
Pgina 113

Captulo 8: Edicin de la lnea de comandos

mark-modified-lines

Esta variable, cuando est establecida en 'on', produce que Readline muestre un asterisco ('*') al comienzo de las lneas de historia que hayan sido modificadas. Esta variable est en 'off' por defecto.
mark-symlinked-directories

Si est establecida a 'on', los nombres completados que son enlaces simblicos a directorios presentan una barra invertida aadida al final (obedeciendo al valor de mark-directories ). El valor por defecto es 'off'
match-hidden-files

Esta variable, cuando est establecida en 'on', produce que Readline encuentre ficheros cuyos nombres comiencen con un '.' (ficheros ocultos) cuando realiza un completado de nombres de fichero. Si su valor es 'off' no mostrar los archivos ocultos a menos que el usuario suministre el '.' inicial en el nombre de archivo a completar. Esta variable est en 'on' por defecto.
output-meta

Si est establecida a 'on', Readline mostrar directamente los caracteres con el octavo bit establecido, en vez de como una secuencia de escape metaprefijada. El valor por defecto es 'off'.
page-completions

Si est establecida en 'on', Readline utiliza un paginador interno tipo more para mostrar una pantalla completa de posibles completados a la vez. Esta variable est en 'on' por defecto.
print-completions-horizontally

Si est establecida en 'on', Readline mostrar los completados que concuerdan ordenados horizontalmente en orden alfabtico, en vez de descender por la pantalla. El valor por defecto es 'off'.
revert-all-at-newline

Si est establecida en 'on', Readline deshar todos los cambios en las lneas de historia antes de retornar cuando se ejecute accept-line (aceptar lnea). Por defecto, las lneas de historia se pueden modificar y mantienen listas de deshacer individuales mediante llamadas a readline. El valor por defecto es 'off'.
show-all-if-ambiguous

Esta variable altera el comportamiento por defecto de las funciones de completado. Si est establecida a 'on' las palabras que tienen ms de un completado posible producirn que las concordancias sean listadas inmediatamente en vez de hacer sonar la campana. El valor por defecto es 'off'.
show-all-if-unmodified

Esto altera el comportamiento por defecto de las funciones de completado de modo similar a show-all-if-ambiguous . Si est establecida en 'on', las
Pgina 114

Captulo 8: Edicin de la lnea de comandos

palabras que tengan ms de un completado posible sin ningn completado parcial posible (los completados posibles no comparten un prefijo comn) producen que las concordancias sean listadas inmediatamente en vez de hacer sonar la campana. El valor por defecto es 'off'.
skip-completed-text

Si est establecida en 'on' modifica el comportamiento de completado por defecto cuando se inserta una nica concordancia dentro de la lnea. Este efecto slo 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 posicin actual en la palabra que est siendo completada. Por ejemplo, si est activado, intentar el completado cuando el cursor est tras la 'e' en 'Makefile' resultar en 'Makefile' en vez de en 'Makefilefile', asumiendo que hay un nico completado posible. El valor por defecto es 'off'.
visible-stats

Si est establecida en 'on', cuando se listan los completados posibles para un nombre de fichero se aade un carcter al final que indica el tipo de fichero. El valor por defecto es 'off'. Asociaciones de teclas La sintaxis para controlar de teclas en el archivo de inicializacin es simple. Primero necesita encontrar el nombre del comando que desea cambiar. La seccin siguiente contiene tablas con los nombres de comando, las teclas rpidas que tiene asociadas por defecto, si las hay, y una descripcin corta de qu hace el comando. Una vez que conozca el nombre del comando, simplemente site en una lnea del archivo de inicializacin 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 funcin de lo que le resulte ms cmodo. Readline permite que las teclas se enlacen, adems 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 inicializacin. Vea la Seccin 4.2 [Comandos Internos de Bash].
nomTecla: nombre_funcin o macro nomTecla es el nombre de la tecla deletreada en ingls. Por ejemplo:
Control-u: universal-argument Meta-Rubout: backward-kill-word Control-o: > salida En el ejemplo anterior, C-u se enlaza a la funcin universal-argument, M-DEL se enlaza con la funcin backward-kill-word, y C-o se enlaza con la

Pgina 115

Captulo 8: Edicin de la lnea de comandos

ejecucin de la macro expresada en el lado derecho (esto es, insertar el texto '> salida' en la lnea). Se reconocen varios nombres de carcter simblicos mientras que se procesa esta sintaxis de enlazado de teclas: DEL, ESC, ESCAPE, LFD, NEWLINE, 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 inicializacin) \e[11~: Tecla de Funcin 1 (tecla de funcin 1) En el ejemplo anterior, C-u se asigna de nuevo a la funcin (universalargument) (como en el primer ejemplo). 'C-x C-r' se asigna a la funcin reread-init-file, y 'ESC [ 1 1 ~' se enlaza para insertar el texto Tecla de Funcin 1

Estn disponibles las siguientes secuencias de escape de estilo GNU Emacs cuando se especifican secuencias de teclas: \C\M\e \\ \ \' prefijo control prefijo meta un carcter escapado barra invertida , una marca de dobles comillas ', una comilla simple o apstrofo

Adicionalmente a las secuencias de escape de estilo GNU Emacs, est disponible un segundo juego de caracteres escapados mediante barra invertida: \a \b \d \f \n \r \t nueva lnea. retorno de carro. tabulacin horizontal. alerta (campana) retroceso borrado

Pgina 116

Captulo 8: Edicin de la lnea de comandos

\v \nnn \xHH

tabulacin vertical. El carcter de ocho bits cuyo valor es el valor octal nnn (de uno a tres dgitos). El carcter de ocho bits cuyo valor es el valor hexadecimal HH (uno o dos dgitos hexadecimales).

Cuando se introduce el texto de una macro, se debe usar comillas dobles o simples para indicar una definicin de macro. El texto sin entrecomillar se considera un nombre de funcin. En el cuerpo de una macro se expanden las cadenas escapadas con barra invertida que se indican ms arriba. La barra invertida entrecomillar cualquier otro carcter en el texto de la macro, incluyendo '' y '''. Por ejemplo, el siguiente enlace har que 'C-x \' inserte una simple '\' en la lnea:
\C-x\\: \\

8.3.2.- Construcciones de inicializacin condicionales


Readline implementa una caracterstica similar en espritu a las caractersticas de compilacin 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 anlisis utilizadas.
$if

La construccin $if permite que las asociaciones se hagan en base al modo de edicin, el terminal que est siendo usado, o la aplicacin que utiliza a Readline. El texto de la comprobacin se extiende hasta el final de la lnea; no se requiere ningn carcter 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 slo si Readline est inicindose en modo emacs. La forma term= se puede utilizar para incluir asociaciones de teclas especficas del terminal, quizs para asociar las secuencias de teclas generadas por las teclas de funcin del terminal. La palabra a la derecha del '=' se compara con el nombre completo del terminal y con la porcin anterior al primer '-' del nombre de terminal. Esto permite, por ejemplo, que sun encaje tanto con sun como con sun-cmd. La construccin application se utiliza para incluir ajustes especficos para la aplicacin. Cada programa que utilice la librera Readline establece el nombre de aplicacin que podemos comprobar en busca de un valor en particular. Esto se puede utilizar para enlazar secuencias de teclas a funciones tiles para un programa especfico. Por ejemplo, el siguiente comando aade una secuencia de teclas que entrecomilla la palabra actual
Pgina 117

term

application

Captulo 8: Edicin de la lnea de comandos

o previa en Bash:
$if Bash # Entrecomilla la palabra previa o la actual "\C-xq": "\eb\"\ef\"" $endif

$endif $else $include

Este comando, como se ve en el ejemplo anterior, termina un comando $if. Los comandos en esta rama de la directiva $if se ejecutan si la comprobacin falla. 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 Inicializacin


A continuacin tenemos un ejemplo de un fichero inputrc. Este muestra la asociacin de teclas, la asignacin 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

Pgina 118

Captulo 8: Edicin de la lnea de comandos

#"\M-OA": previous-history #"\M-OB": next-history # # 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
Pgina 119

Captulo 8: Edicin de la lnea de comandos

"\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 set bell-style visible # dont 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 Readline


Esta seccin 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 Seccin 4.2 [Comandos Internos de Bash]) para obtener un formato ms 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 posicin actual del cursor, y marca (mark) se refiere a una posicin del cursor guardada por el comando set-mark. El texto entre el punto y la marca se denomina regin.

Pgina 120

Captulo 8: Edicin de la lnea de comandos

8.4.1.- Comandos de Movimiento


beginning-of-line (C-a) Avanza hasta el principio de la lnea actual. end-of-line (C-e) Retrocede hasta el final de la lnea. forward-char (C-f) Desplaza un carcter hacia adelante. backward-char (C-b) Desplaza un carcter hacia atrs. forward-word (M-f) Avanza hasta el final de la siguiente palabra. Las palabras estn compuestas de letras y dgitos. backward-word (M-b) Retrocede hasta el comienzo de la palabra actual o la palabra previa. Las palabras estn compuestas de letras y dgitos. shell-forward-word () Avanza hasta el final de la siguiente palabra. Las palabras estn 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 estn delimitadas por metacaracteres de la shell no entrecomillados. clear-screen (C-l) Limpia la pantalla y redibuja la lnea actual en la parte alta de la pantalla. redraw-current-line () Refresca la lnea actual. Por defecto no est asociado a ninguna tecla.

8.4.2.- Comandos para Manipular la Historia


accept-line (Nueva_lnea o Return) Acepta la lnea sin importar donde est el cursor. Si esta lnea no est vaca, la aade a la lista de historia de acuerdo a los ajustes de las variables HISTCONTROL y HISTIGNORE. Si esta lnea es una lnea de historia modificada, entonces devuelve la lnea 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 lnea en la historia
Pgina 121

Captulo 8: Edicin de la lnea de comandos

end-of-history (M->) Mueve al final de la historia, esto es, la lnea que se est introduciendo actualmente reverse-search-history (C-r) Busca hacia atrs comenzando en la lnea actual y movindose hacia arriba a travs de la historia tanto como sea necesario. Esta es una bsqueda incremental. forward-search-history (C-s) Busca hacia adelante comenzando en la lnea actual y movindose hacia abajo a travs de la historia tanto como sea necesario. Esta es una bsqueda incremental. non-incremental-reverse-search-history (M-p) Busca hacia atrs comenzando en la lnea actual y movindose hacia arriba a travs de la historia tanto como sea necesario utilizando una bsqueda no incremental para una cadena suministrada por el usuario. non-incremental-forward-search-history (M-n) Busca hacia adelante comenzando en la lnea actual y movindose hacia abajo a travs de la historia tanto como sea necesario utilizando una bsqueda no incremental para una cadena suministrada por el usuario. history-search-forward () Busca hacia adelante a travs de la historia para la cadena de caracteres entre el comienzo de la lnea actual y el punto. Esta es una bsqueda 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 lnea 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 extrado como si se hubiese especificado el comando de expansin 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 retrocedern a travs de la lista de historia, insertando el ltimo argumento de cada lnea sucesivamente. Se utilizan las caractersticas de expansin de la historia para extraer el ltimo argumento, como si se hubiese especificado el comando de expansin de la historia '!$'.

8.4.3.- Comandos para Modificar el Texto


delete-char (C-d) Borra el carcter en el punto. Si el punto est el comienzo de la lnea, no hay caracteres en la lnea, y el ltimo carcter introducido no est asociado a delete-char, entonces devuelve EOF.
Pgina 122

Captulo 8: Edicin de la lnea de comandos

backward-delete-char (Rubout) Borra el carcter detrs del cursor. Un argumento numrico significa cortar los caracteres en vez de eliminarlos. forward-backward-delete-char () Borra el carcter bajo el cursor, a menos que el cursor est al final de la lnea, en cuyo caso se borra el carcter detrs del cursor. Por defecto no est asociado a ninguna tecla. quoted-insert (C-q o C-v) Aade el siguiente carcter introducido a la lnea 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 transpose-chars (C-t) Arrastra el carcter anterior al cursor hacia adelante sobre el carcter en la posicin del cursor, avanzando tambin el cursor. Si el punto de insercin est al final de la lnea, entonces esto transpone los dos ltimos caracteres de la lnea. 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 tambin el punto hasta justo despus de la segunda palabra. upcase-word (M-u) Cambia a maysculas la palabra actual (o la siguiente). Con un argumento negativo, cambia a maysculas la palabra anterior, pero no mueve el cursor. downcase-word (M-l) Cambia a minsculas la palabra actual (o la siguiente). Con un argumento negativo, cambia a minsculas 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 explcito de valor numrico positivo, cambia al modo de sobreescritura. Con un argumento explcito de valor numrico negativo, cambia al modo de insercin. Este comando afecta slo al modo emacs; el modo vi sobreescribe de forma diferente. Cada llamada a readline() se inicia en el modo de insercin. 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 carcter anterior al punto con un espacio. Por defecto, este comando no est asociado a ninguna tecla.

Pgina 123

Captulo 8: Edicin de la lnea de comandos

8.4.4.- Cortando y Pegando


kill-line (C-k) Corta el texto desde el punto hasta el final de la lnea backward-kill-line (C-x Rubout) Corta hacia atrs hasta el comienzo de la lnea. unix-line-discard (C-u) Corta hacia atrs desde el cursor hasta el comienzo de la lnea. kill-whole-line () Corta todos los caracteres en la lnea actual, no importa donde est el punto. Por defecto no est asociado a ninguna tecla. 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 lmites de palabra son los mismos que en forward-word. backward-kill-word (M-DEL) Corta la palabra anterior al punto. Los lmites 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 lmites de palabra son los mismos que en shell-forward-word. backward-kill-word () Corta la palabra anterior al punto. Los lmites de palabra son los mismos que en shell- backward-word. unix-word-rubout () Corta la palabra anterior al punto, usando el carcter 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 regin actual. Por defecto este comando no est asociado a ninguna tecla. copy-region-as-kill () Copia el texto en la regin a la memoria intermedia (buffer) de corte, de forma que
Pgina 124

Captulo 8: Edicin de la lnea de comandos

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 lmites 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 lmites de palabra son los mismos que en forward-word. Por defecto, este comando no est asociado a ninguna tecla. yank (C-y) Pega la cima del anillo de corte dentro de la memoria intermedia en la posicin del punto. yank-pop (M-y) Gira el anillo de corte, y pega la nueva cima. Slo se puede hacer esto si el comando anterior es yank o yank-pop.

8.4.5.- Especificando Argumentos Numricos


digit-argument (M-0, M-1, , M--) Aade este dgito 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 ms dgitos, opcionalmente con un signo menos al comienzo, estos dgitos definen el argumento. Si el comando es seguido por dgitos, ejecutar universal-argument de nuevo finaliza el argumento numrico pero en caso contrario no se tiene en cuenta. Como caso especial, si este comando es seguido inmediatamente por un carcter que no es un dgito ni un signo menos, el nmero del argumento para el siguiente comando se multiplica por cuatro. El nmero de argumento inicialmente es uno, de forma que ejecutar esta funcin la primera vez hace que el nmero de argumento sea cuatro, una segunda vez hace que el nmero de argumento sea diecisis, 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 especfico de la aplicacin. 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 anfitrin (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.
Pgina 125

Captulo 8: Edicin de la lnea de comandos

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 habran 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 ejecucin repetida de menu- complete avanza a travs 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 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 atrs en la lista. Este comando busca estar asociado a TAB, pero no est asociado por defecto. menu-complete-backward () Es idntico a menu-complete, salvo que se desplaza hacia atrs en la lista de completados posibles, como si se hubiese proporcionado un argumento negativo a menu-complete. delete-char-or-list() Borra el carcter bajo el cursor si no est al principio o al final de la lnea (como delete- char). Si est al final de la lnea se comporta de forma idntica 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, tratndolo como un nombre de fichero. complete-username (M-~) Intenta el completado del texto anterior al punto, tratndolo como un nombre de usuario. possible-username-completions (C-x ~) Lista los completados posibles del texto anterior al punto, tratndolo como un nombre de usuario. complete-variable (M-$) Intenta el completado del texto anterior al punto, tratndolo como una variable de shell. possible-variable-completions (C-x $) Lista los completados posibles del texto anterior al punto, tratndolo como una variable de shell.

Pgina 126

Captulo 8: Edicin de la lnea de comandos

complete-hostname (M-@) Intenta el completado del texto anterior al punto, tratndolo como un nombre de anfitrin (host). possible-hostname-completions (C-x @) Lista los completados posibles para el texto anterior al punto, tratndolo como un nombre de anfitrin. complete-command (M-!) Intenta el completado del texto anterior al punto, tratndolo como un nombre de comando. El completado de comandos intenta concordar el texto contra alias, palabras reservadas, funciones de shell, comandos internos de la shell, y finalmente, nombres de ficheros ejecutables, en ese orden. possible-command-completions (C-x !) Lista los completados posibles del texto anterior al punto, tratndolo como un nombre de comando. dynamic-complete-history (M-TAB) Intenta completar el texto anterior al punto comparando dicho texto con las lneas 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 lneas 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 Seccin 3.5.1 [Expansin de Llaves]).

8.4.7.- Macros de Teclado


start-kbd-macro (C-x () Inicia la grabacin de los caracteres introducidos dentro de la macro de teclado actual. end-kbd-macro (C-x )) Detiene la grabacin de los caracteres introducidos en la macro de teclado actual y guarda la definicin. call-last-kbd-macro (C-x e) Vuelve a ejecutar la macro de teclado definida ms recientemente, haciendo que los caracteres introducidos en la macro aparezcan como si hubiesen sido introducidos por el teclado.

8.4.8.- Algunos comandos variados


re-read-init-file (C-x C-r) Lee el contenido del fichero inputrc y aade cualquier asociacin o asignacin de variable que encuentre en l.
Pgina 127

Captulo 8: Edicin de la lnea de comandos

abort (C-g) Cancela el comando de edicin actual y hace sonar la campana (obedeciendo a la variable bell-style ). do-uppercase-version (M-a, M-b, M-x, ) Si el carcter x en M-x est en minsculas ejecuta el comando enlazado con el carcter maysculas correspondiente. prefix-meta (ESC) Prefija con Meta el siguiente carcter introducido. Es til en teclados que no poseen una tecla meta. Introducir 'ESC f' es equivalente a introducir M-f. undo (C-_ o C-x C-u) Deshace de forma incremental, recordado aisladamente para cada lnea. revert-line (M-r) Deshace todos los cambios realizados en esta lnea. Esto es cmo ejecutar el comando undo las veces suficientes para volver al principio. tilde-expand (M-&) Realiza la expansin de tilde en la palabra actual. set-mark (C-@) Establece la marca en el punto. Si se suministra un argumento numrico la marca se establece en esa posicin. exchange-point-and-mark (C-x C-x) Intercambia el punto con la marca. La posicin actual del cursor se establece en la posicin guardada, y la posicin del cursor se guarda como la marca. character-search (C-]) Se lee un carcter y se mueve el punto a la siguiente ocurrencia de ese carcter. Una cuenta negativa busca ocurrencias previas. character-search-backward (M-C-]) Se lee un carcter y se mueve el punto a la ocurrencia previa de ese carcter. Una cuenta negativa busca ocurrencias siguientes. skip-csi-sequence () Lee los caracteres suficientes para consumir una secuencia de teclas mltiple 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 tendrn efecto a menos que se enlace explcitamente a un comando de Readline, en vez de insertar caracteres en la memoria intermedia de edicin. Por defecto no est asociado, pero normalmente se asocia con ESC-[. insert-comment (M-#) Sin argumento numrico el valor de la variable comment-begin se inserta al principio de la lnea actual. Si se suministra un valor numrico este comando acta como un
Pgina 128

Captulo 8: Edicin de la lnea de comandos

interruptor; si los caracteres del principio de la lnea 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 lnea. En cualquier caso, se acepta la lnea como si se hubiese introducido un carcter nueva lnea. El valor por defecto de comment- begin produce que este comando convierta la lnea actual en un comentario de la shell. Si un argumento numrico provoca que se elimine el carcter de comentario la lnea ser ejecutada por la shell. dump-functions () Imprime todas las funciones y sus asociaciones de teclas en el flujo de salida de Readline. Si se suministra un valor numrico, 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 numrico 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 numrico 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 patrn para expansin de rutas, con un asterisco aadido implcitamente al final. Este patrn 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 patrn para expansin de rutas y la lista de nombres concordantes se inserta, reemplazando a dicha palabra. Si se suministra un argumento numrico, se aade un '*' al final de la palabra antes de realizar la expansin de rutas. glob-list-expansions (C-x g) Se muestra la lista de expansiones que se podran generar por glob-expand-word, y se redibuja la lnea. Si se suministra un argumento numrico, se aade un '*' al final de la palabra antes de realizar la expansin de rutas. display-shell-version (C-x C-v) Muestra informacin de versin de la instancia actual de Bash. shell-expand-line (M-C-e) Expande la lnea como lo hace la shell. Este comando realiza expansin de alias y de historia as como todas las expansiones de palabra de la shell (vea la Seccin 3.5
Pgina 129

Captulo 8: Edicin de la lnea de comandos

[Expansiones de la Shell]). history-expand-line (M-^) Realiza la expansin de historia en la lnea actual. magic-space () Realiza expansin de la historia en la lnea actual e inserta un espacio (vea la Seccin 9.3 [Interaccionando con la Historia]). alias-expand-line () Realiza expansin de alias en la lnea actual (vea la Seccin 6.6 [Alias]). historiy-and-alias-expand-line () Realiza la expansin de la historia y de alias en la lnea actual. insert-last-argument (M-. o M-_) Es un sinnimo para yank-last-arg. operate-and-get-netx (C-o) Acepta la lnea actual para su ejecucin y trae la siguiente lnea con respecto a la lnea actual de la historia para su edicin. Se ignora cualquier argumento suministrado. edit-and-execute-command (C-xC-e) Invoca a un editor en la lnea 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 Readline


Aunque la librera Readline no tiene un juego completo de funciones de edicin de vi, s contiene lo suficiente para permitir la edicin simple de la lnea. El modo vi de Readline se comporta como se especifica en el estndar POSIX 1003.2. Se utilizan los comandos 'set -o emacs' y 'set -o vi' para intercambiar interactivamente entre los modos de edicin emacs y vi (vea la Seccin 4.3.1 [El Comando Interno Set]). El modo por defecto de Readline es el modo emacs. Cuando introduzca una lnea en el modo de edicin de vi, se encontrar en el modo de insercin cmo si hubiese introducido una 'i'. Presionar ESC le cambiar al modo 'command', donde podr editar el texto de la lnea con las teclas de movimiento estndares de vi, moverse a las lneas anteriores de la historia con 'k' y a las lneas siguientes con 'j', y as sucesivamente.

8.6.- Completado Programable


Las caractersticas 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 especificacin de completado (un compspec) usando el comando interno complete (vea la Seccin 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 vaca (se intenta el completado al inicio de una lnea vaca), se utiliza cualquier compspec

Pgina 130

Captulo 8: Edicin de la lnea de comandos

definido con la opcin '-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 bsquedas no encuentran un compspec, se utilizar por defecto cualquier compspec definido con la opcin '-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 ningn compspec, se realiza el completado por defecto de Bash descrito anteriormente (vea la Seccin 8.4.6 [Comandos para Completado]). Primero, se utilizan las acciones especificadas por el compspec. Slo se devuelven las palabras que son prefijadas por la palabra que est siendo completada. Cuando se utiliza la opcin '-f' o '-d' para un completado de nombre de fichero o de directorio, se utiliza la variable de shell FIGNORE para filtrar las concordancias. Vea la Seccin 5.2 [Variables de Bash], para una descripcin de FIGNORE. Despus se genera cualquier completado especificado para la opcin '-G' con un patrn de expansin de nombres de fichero. Las palabras generadas por el patrn 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. Despus, se considera la cadena especificada como argumento para la opcin '-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 continuacin utilizando expansin de llaves, expansin de tildes, expansin de parmetros y variables, sustitucin de comandos y expansin aritmtica como se describi anteriormente (vea la Seccin 3.5 [Expansiones de la Shell]). Los resultados se separan utilizando las reglas descritas con anterioridad (vea la Seccin 3.5.7 [Separacin de Palabras]). Los resultados de la expansin son concordancias prefijadas por la palabra que est siendo completada, y las palabras concordantes se convierten en posibles completados. Despus de generar estas concordancias, se invoca a cualquier funcin de shell o cualquier comando especificado con las opciones '-F' y '-C' respectivamente. Cuando se invoca al comando o la funcin se asignan valores a las variables COMP_LINE , COMP_POINT , COMP_KEY Y COMP_TYPE cmo se describi anteriormente (vea la Seccin 5.2 [Variables de Bash]). Si se est invocando una funcin de shell tambin se asignan las variables COMP_WORDS y COMP_CWORD . Cuando se invoca a la funcin o el comando, el primer argumento es el nombre del comando cuyos argumentos estn 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 lnea de comandos actual. No se realiza ningn filtrado de los completados generados con respecto a la palabra que est siendo completada. Primero se invoca cualquier funcin especificada con '-F'. La funcin puede utilizar cualquier caracterstica de la shell, incluyendo los comandos internos compgen y compopt descritos ms abajo (vea la Seccin 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 . Despus, se invoca a cualquier comando especificado con la opcin '-C' en un entorno equivalente a la sustitucin de comandos. Esto debera imprimir una lista de completados, uno por lnea, para la salida estndar. Se puede utilizar la barra invertida para escapar una nueva lnea si es
Pgina 131

Captulo 8: Edicin de la lnea de comandos

necesario. Despus de generar todos los completados posibles, se aplica a la lista cualquier filtro especificado con la opcin '-X'. El filtro es un patrn similar a los usados para la expansin de rutas;Un smbolo '&' en el patrn 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 patrn ser eliminado de la lista. Un '!' marginal invierte el patrn; en este caso cualquier completado que no concuerde con el patrn ser eliminado. Finalmente, se aadir 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 cdigo de completado de Readline como una lista de completados posibles. Si las acciones aplicadas anteriormente no generan ninguna concordancia, y se suministr la opcin '-o nombreDir' a complete cuando se defini el compspec, se intentar un completado de nombre de directorio. Si se suministr la opcin '-o plusdirs' a complete cuando se defini el compspec se intentar el completado de nombres de directorio y cualquier coincidencia ser aadida a los resultados de las otras acciones. Por defecto, si se encuentra un compspec lo que este genere es devuelto al cdigo 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 opcin '-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 opcin '-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 aadir una barra inclinada al final para completar los nombres que son enlaces simblicos a directorios, obedeciendo al valor de la variable de Readline mark-directories . Hay soporte para modificar dinmicamente los completados. Esto es ms til cuando se utiliza en combinacin con un completado por defecto especificado con '-D'. Esto es posible para funciones de shell ejecutadas como manejadores de completado para indicar que se debera reintentar el completado devolviendo un estado de salida de 124. Si la funcin 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 funcin), el completado programable reinicia desde el principio, con un intento de encontrar un compspec para ese comando. Esto permite construir un juego de completados dinmicamente cuando se intenta el completado, en vez de ser cargados todos a la vez. Por ejemplo, asumiendo que hay una librera de compspecs, cada uno mantenido en un fichero correspondiente al nombre del comando, la siguiente funcin de completado por defecto cargar los completados dinmicamente:
_completion_loader() {
Pgina 132

Captulo 8: Edicin de la lnea de comandos

. "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124 } complete -D -F _completion_loader

8.7.- Comandos Internos para el Completado Programable


Estn disponibles dos comandos internos para manipular las caractersticas de completado programable
compgen compgen [opcin] [palabra]

Genera completados posibles coincidentes para palabra de acuerdo con las opciones, las cuales pueden ser cualquier opcin aceptada por el comando interno complete con la excepcin de '-p' y '-r', y escribe las coincidencias en la salida estndar. Cuando se utiliza la opcin '-F' o la opcin '-C' las variables de la shell ajustadas por las caractersticas de completado programable, mientras estn disponibles, no tendrn valores tiles. Las coincidencias se generarn de la misma forma que si hubieran sido generadas directamente por el cdigo de completado programable desde una especificacin de completado con las mismas banderas. Si se especifica palabra, slo se mostrarn aquellos completados que concuerden con palabra. El valor devuelto es true a menos que se suministre alguna opcin invlida o no se genere ninguna coincidencia.
complete complete [-abcdefgjksuv] [-o comp-option] [-DE] [-A accin] [-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 opcin '-p', o si no se suministra ninguna opcin, se imprimen las especificaciones de completado de forma que permita reutilizarlas como entrada. La opcin '-r' elimina una especificacin de completado para cada uno de los nombres o todas las especificaciones si no se proporciona ningn nombre. La opcin '-D' indica que las opciones y acciones

restantes deberan aplicarse al comando de completado default; Esto es, se intentar el completado en un comando para el que no se haya definido previamente ningn completado. La opcin '-E' indica que las opciones y acciones restantes deberan aplicarse a comando de completado empty; esto es, se intentar el completado en una lnea en blanco. El proceso de aplicar estas especificaciones de completado cuando se intenta el completado de palabra se describe ms arriba (vea la Seccin 8.6 [Completado Programable]). La opcin '-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
Pgina 133

Captulo 8: Edicin de la lnea de comandos

entrecomillados para protegerlos de la expansin antes de que se invoque al comando interno complete.
-o opcin-comp La opcin-comp controla varios aspectos del comportamiento de la compspec antes de la generacin de completados. opcin-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 dirnames filenames

Usa el completado de nombres de fichero por defecto de Readline si el compspec no genera ninguna coincidencia. Realiza el completado de nombres de directoria si el compspec no genera ninguna coincidencia. Indica a Readline que el compspec genere nombres de fichero, de forma que este puede realizar cualquier procesado especfico de estos nombres (como aadir una barra inclinada a los nombres de directorio con caracteres especiales entrecomillados, o suprimir los espacios en blanco marginales.

nospace plusdirs

Le dice a Readline que no aada un espacio al final (lo que hace por defecto) a las palabras completadas al final de la lnea. Despus de que se genere cualquier coincidencia definida por compspec se intenta un completado de nombres de directorio y cualquier coincidencia se aade a los resultados de las otras acciones.

-A accin

La accin puede ser una de las siguientes para generar una lista de completados posibles:
alias arrayvar binding builtin command

Nombres de alias. Tambin se puede especificar con '-a'. Nombres de variables de tipo array. Nombres de asociaciones de teclas de Readline (vea la Seccin 8.4 [ Comandos de Readline Enlazables]). Nombres de comandos internos de la shell. Tambin se puede especificar con '-b'. Nombres de comandos. Tambin se puede especificar con 'c'.

Pgina 134

Captulo 8: Edicin de la lnea de comandos

directory disabled enabled export file function group helptopic

Nombres de directorio. Tambin se puede especificar con '-d'. Nombres de comandos internos de la shell deshabilitados. Nombres de comandos internos de la shell habilitados. Nombres de variables de la shell exportadas. Tambin se puede especificar con '-e'. Nombres de ficheros. Tambin se puede especificar con '-f'. Nombres de funciones de la shell. Nombres de grupos. Tambin se puede especificar con '-g'. Temas de ayuda como los aceptados por el comando interno help (vea la Seccin 4.2 [Comandos Internos de Bash]).

hostname

Nombres de anfitrin (Host), tal como se toman desde el archivo especificado por la variable de la shell HOSTFILE (vea la Seccin 5.2 [Variables de Bash]).
job keyword running service setopt shopt

Nombres de tareas, si el control de tareas est activo. Tambin se puede especificar con '-j'. Palabras reservadas de la shell. Tambin se puede especificar con '-k'. Nombres de tareas en ejecucin, si el control de tareas est activo. Nombres de servicio. Tambin se puede especificar con '-s'. Argumentos vlidos para la opcin '-o' del comando interno set (vea la Seccin 4.3.1 [El Comando Interno Set]). Nombres de opciones de la shell aceptadas por el comando interno shopt (vea la Seccin 4.2 [Comandos Internos de Bash]). Nombres de seal. Nombres de tareas detenidas, si el control de tareas est activo. Nombres de usuario. Tambin se puede especificar con '-u'. Nombres de variables de la shell. Tambin se puede especificar con '-v'.

signal stopped user variable

-G patglob

El patrn de expansin de nombres de fichero patglob se expande para generar los completados posibles.

Pgina 135

Captulo 8: Edicin de la lnea de comandos

-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 funcin 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 .
-X patfiltro patfiltro es un patrn como los usados para la expansin 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 patrn; en este caso, se elimina cualquier completado que no concuerde con patfiltro.
-P prefijo

Se aade prefijo al comienzo de cada posible completado despus de que hayan sido aplicadas todas las dems opciones.
-S sufijo

Se aade sufijo al final de cada posible completado despus de que hayan sido aplicadas todas las dems opciones. El valor devuelto es true a menos que se suministre una opcin invlida, se suministre alguna opcin distinta de '-p' o '-r' sin un argumento nombre, se intente eliminar una especificacin de completado para un nombre para el que no exista especificacin u ocurra un error aadiendo una especificacin de completado.
compopt compopt [-o opcin] [-DE] [+ opcin] [nombre] Modifica las opciones de completado para cada nombre de acuerdo con las opciones

dadas, o para el completado actualmente en ejecucin 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 opcin son los vlidos para el comando interno complete descrito ms arriba. La opcin '-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 ningn completado. La opcin '-E' indica que las opciones restantes deben aplicarse al comando de completado empty; esto es, se intenta el completado en una lnea en blanco. La opcin '-D' tiene preferencia sobre la '-E'. El valor devuelto es true a menos que se suministre alguna opcin invlida, se intente
Pgina 136

Captulo 8: Edicin de la lnea de comandos

modificar las opciones para un nombre para el cual no existe especificacin de completado u ocurra un error en la salida.

Pgina 137

Captulo 9: Usando la Historia Interactivamente

9.- Usando la Historia Interactivamente


Este captulo describe como usar la Librera de Historia de GNU interactivamente, desde la posicin de un usuario, por lo que debera considerarse como una gua de usuario. Para informacin sobre la utilizacin de la Librera de Historia de GNU en otros programas, vea el Manual de la Librera Readline de GNU.

9.1.- Caractersticas de Historia de Bash


Cuando se activa la opcin '-o history' para el comando interno set (vea la Seccin 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 nmero 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 expansin de parmetros y variables pero despus de realizar la expansin 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 ms que el nmero de lneas especificado por el valor de la variable HISTFILESIZE . Cuando una shell interactiva finaliza, las ltimas $HISTSIZE lneas se copian desde la lista de historia al fichero cuyo nombre viene dado por $HISTFILE . Si est establecida la opcin de la shell histappend (vea la Seccin 4.2 [Comandos Internos de Bash]), las lneas se aaden 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. Despus de guardar la historia, el fichero de historia se trunca para no contener ms de $HISTFILESIZE lneas. Si HISTFILESIZE no est establecida, no se realiza ningn truncado. Si HISTTIMEFORMAT est establecida, se escribe en el archivo de historia la informacin de marca de tiempo asociada con cada entrada de la historia, marcada con el carcter de comentario de la historia. Cuando se lee el fichero de la historia, las lneas que comienzan con el carcter de comentario de la historia seguido inmediatamente por un dgito se interpretan como marcas de tiempo para la lnea de historia previa. Se puede utilizar el comando interno fc para listar o editar y volver a ejecutar una porcin 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 edicin de lnea de comandos, los comandos de bsqueda estn disponibles en cada modo de edicin que proporcione acceso a la lista de historia (vea la Seccin 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 slo un subconjunto de los comandos introducidos. La opcin de shell cmdhist, si est activada, produce que la shell intente guardar cada lnea de un comando multilnea en la misma entrada de la historia, aadiendo punto y coma donde sea necesario para mantener la correccin semntica. La opcin de la shell lithist produce que la shell guarde el comando con caracteres nueva lnea embebidos en vez de con punto y coma. Se utiliza el comando interno shopt para establecer estas opciones. Vea
Pgina 138

Captulo 9: Usando la Historia Interactivamente

la Seccin 4.2 [Comandos Internos de Bash], para una descripcin del comando interno shopt.

9.2.- Comandos Internos para la Historia de Bash


Bash proporciona dos comandos internos que manipulan la lista de historia y el fichero de historia
fc fc [-e enombre] [-lnr] [primero] [ultimo] fc -s [pat=rep] [comando]

Comando fijo. En la primera forma, se selecciona un rango de comandos desde primero a ltimo desde la lista de historia. Tanto primero como ltimo pueden ser especificados como una cadena (para localizar el comando ms reciente comenzando con esa cadena) o como un nmero (un ndice en la lista de historia, donde un nmero negativo se utiliza como un desplazamiento desde el nmero 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 edicin y -16 en el caso de imprimir listados. Si se le pasa la bandera '-l' se listan los comandos en la salida estndar. La bandera ' -n' suprime los nmeros 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 expansin 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 edicin, los comandos son mostrados y ejecutados. En la segunda forma, se vuelve a ejecutar comando despus 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 Seccin 6.6 [Alias]).
history history history history history history [n] -c -d desplazamiento [-anrw] [nombrefichero] -ps arg

Sin opciones muestra la lista de historia con nmeros de lnea. Las lneas precedidas por '*' han sido modificadas. Un argumento n lista slo las n ltimas lneas. 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 lnea de historia. Las opciones, si se suministran, tienen los siguientes significados:
-c

Limpia la lista de historia. Esta opcin puede combinarse con otras opciones para reemplazar completamente la lista de historia.
Pgina 139

Captulo 9: Usando la Historia Interactivamente

-d desplazamiento

Borra la entrada de la historia en la posicin desplazamiento. El desplazamiento es el mismo que aparece cuando se muestra la historia.
-a

Aade las nuevas lneas de historia (las lneas de historia introducidas desde el comienzo de la sesin actual de Bash) al final del fichero de historia. Aade las lneas de historia que no han sido ledas an desde el fichero de historia a la lista actual de historia. Estas lneas son aadidas al final del fichero de historia desde el comienzo de la sesin actual de Bash. Lee el archivo actual de historia y aade su contenido al final de la lista de historia. Vuelca la historia actual al fichero de historia. Realiza sustituciones de historia en los args y muestra el resultado en la salida estndar sin almacenar los resultados en la lista de historia. Los argumentos se aaden al final de la lista de historia como una entrada nica.

-n

-r -w -p -s

si se proporciona nombrefichero con las opcines '-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.- Expansin de la Historia


La librera de Historia proporciona una caracterstica de expansin de la historia que es similar a la expansin de la historia que proporciona csh. Esta seccin describe la sintaxis utilizada para manipular la informacin 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 lnea de entrada actual, o corregir errores en comandos anteriores rpidamente. 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 sustitucin. La segunda consiste en seleccionar partes de dicha lnea para insertarlas en la lnea actual. La lnea seleccionada de la historia se denomina evento, y las porciones de dicha lnea sobre las que se acta se denominan palabras. Estn disponibles varios modificadores para manipular las palabras seleccionadas. La lnea 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 aparicin del carcter de expansin de historia, que por defecto es '!'. Slo se puede utilizar '\' y ''' para escapar el carcter de expansin de la historia. Se pueden utilizar varias opciones de la shell modificables con el comando interno shopt para adaptar el comportamiento de la expansin de la historia. Si est activada la opcin 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 lnea expandida se recarga en el buffer
Pgina 140

Captulo 9: Usando la Historia Interactivamente

de edicin de Readline para posteriores modificaciones. Si se est utilizando Readline, y la opcin de shell histreedit est activada, una expansin de la historia fallida se recargar en el buffer de edicin de Readline para su correccin. Puede utilizarse la opcin '-p' del comando interno history para ver lo que har la expansin de historia antes de usarla. Se puede utilizar la opcin '-s' del comando interno history para aadir comandos al final de la lista de historia sin ejecutarlos realmente, de forma que pueden estar disponibles para rellamadas posteriores. Esto es ms til utilizado junto con Readline. La shell permite controlar varios caracteres usados en el mecanismo de expansin de la historia con la variable histchars, como se explic anteriormente (vea la Seccin 5.2 [Variables de Bash]). La shell utiliza el carcter de comentario de la historia para sealar las marcas de tiempo de la historia cuando escribe el fichero de historia.

9.3.1.- Designadores de Evento


Un designador de eventos es una referencia a una entrada de la lnea de comandos en la lista de historia.
!

Inicia una sustitucin de la historia, excepto cuando es seguido de un espacio, una tabulacin, el final de lnea, '=' o '(' (cuando la opcin de shell extglob est activada usando el comando interno shopt). Referencia al comando de la lnea n Referencia al comando situado n lneas atrs Referencia al comando previo. Este es un sinnimo para '!-1'

!n !-n !!

!cadena Referencia al comando mas reciente que comienza con cadena. !?cadena[?]

Referencia al comando ms reciente que contiene cadena. El '?' final puede omitirse si la cadena es seguida inmediatamente por una nueva lnea.
^cadena1^cadena2^

Sustitucin rpida. Repite el ltimo comando, reemplazando cadena1 con cadena2. Es equivalente a !!:s/cadena1/cadena2/.
!#

La lnea de comandos introducida hasta el momento.

9.3.2.- Designadores de Palabra


Los designadores de palabra se utilizan para seleccionar las palabras deseadas del evento. Un ':' separa la especificacin 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 lnea, con la primera palabra denotada por 0 (cero). Las palabras se insertan en la lnea actual separadas por espacios individuales. Por ejemplo,
!!

designa el comando anterior. Cuando introduce esto, se repite el comando anterior completamente.
Pgina 141

Captulo 9: Usando la Historia Interactivamente

!!:$ !fi:2

designa el ltimo argumento del comando anterior. Puede abreviarse a !$ designa el segundo argumento del comando ms reciente que comienza con las letras 'fi'.

Los designadores de palabra son los siguientes: 0 (cero) La palabra nmero 0. Para muchas aplicaciones es el propio comando. n ^ $ % x-y * La n-sima palabra. El primer argumento, esto es, la palabra 1. El ltimo argumento. La palabra encontrada por la bsqueda '?cadena?' ms reciente. Un rango de palabras; '-y' es una forma abreviada para '0-y'. Todas las palabras, excepto la nmero 0. Este es un sinnimo para '1-$'. No es un error utilizar '*' si hay justo una palabra en el evento; en tal caso de devuelve la cadena vacia. Es una abreviatura para 'x-$'. Es una abreviatura para 'x-$' como 'x*', pero omite la ltima palabra.

x* x-

Si se suministra un designador de palabra sin una especificacin de evento, se utiliza como evento el comando anterior.

9.3.3.- Modificadores
Tras el designador de palabra opcional se puede aadir una secuencia de uno o ms de los siguiente modificadores, cada uno precedido por un ':'
h t r e p q X

Elimina un componente de ruta del final, dejando slo la cabeza (head). Elimina todos los componentes de ruta, dejado slo la cola (tail). Elimina un sufijo de la forma '.sufijo', dejando el nombre base. Elimina todo menos el sufijo final. Imprime el nuevo comando pero no lo ejecuta. Entrecomilla las palabras sustituidas, protegindolas de sustituciones posteriores. Entrecomilla las palabras sustituidas, como con 'q' pero separa en palabras en funcin de los espacios, tabulaciones y nuevas lneas. Sustituye nuevo por la primera ocurrencia de viejo en la lnea de evento. Se puede utilizar cualquier delimitador en lugar de '/'. Se puede citar un carcter delimitador en viejo y nuevo protegindolo con una barra invertida. Si nuevo contiene '&' este es

S/viejo/nuevo/

Pgina 142

Captulo 9: Usando la Historia Interactivamente

reemplazado por viejo. Se puede proteger el carcter '&' con una barra invertida. El delimitador final es opcional si es el ltimo carcter en la lnea de entrada.
& g a G

Repite la sustitucin anterior. Provoca que los cambios se apliquen sobre la lnea de evento completa. Se usa junto con 's', como en gs/nuevo/viejo/, o con '&'. Aplica el siguiente modificador 's' una vez a cada palabra en el evento.

Pgina 143

Captulo 10: Instalando Bash

10.- Instalando Bash


Este captulo proporciona instrucciones bsicas para instalar Bash en las mltiples plataformas soportadas. La distribucin soporta los sistemas operativos GNU, casi cualquier versin 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.- Instalacin Bsica


Estas son las instrucciones de instalacin para Bash. La forma ms fcil de compilar Bash es: 1. cd al directorio que contiene el cdigo fuente y escriba './configure' para configurar Bash para su sistema. Si est usando csh o alguna versin antigua de System V, podra necesitar introducir 'sh ./configure' en vez de lo anterior para evitar que csh intente ejecutar configure por s mismo. Ejecutar configure toma algn tiempo. Mientras que se ejecuta, imprime mensajes que informan sobre las caractersticas que est comprobando. 2. Escriba 'make' para compilar Bash y construir el guin 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 tambin instalar las pginas del manual y el fichero info. El script de shell configure intenta encontrar los valores correctos para mltiples variables dependientes del sistema que se utilizan durante la compilacin. 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 ms). Este tambin 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 configuracin actual, un fichero 'config.cache' que guarda los resultados de los test para acelerar la reconfiguracin, y un fichero 'config.log' que contiene la salida de compilacin (til principalmente para depurar configure). Si 'config.cache' contiene en algn punto resultados que usted no quiera mantener, puede eliminarlos o editarlos. Para encontrar ms informacin 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 podra configure comprobar cuando realizarlas y cuando no, y enve las diferencias o las instrucciones a bashmaintainers@gnu.org de forma que estas puedan ser consideradas para la prxima publicacin. El fichero 'configure.in' se utiliza para crear configure mediante un programa denominado Autoconf. Slo necesita el 'configure.in' si desea cambiar o regenerar el script configure utilizando una nueva versin de Autoconf. Si hace esto, asegrese de estar usando una versin de Autoconf igual o superior a la 2.50. Puede eliminar los binarios del programa y los ficheros objeto desde el directorio del cdigo fuente introduciendo 'make clean'. Para eliminar todos los ficheros creados por configure (de
Pgina 144

Captulo 10: Instalando Bash

forma que pueda compilar Bash para un tipo diferente de computador), introduzca 'make distclean'.

10.2.- Compiladores y Opciones


Algunos 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 configuracin utiliza GCC, si est disponible, para construir Bash.

10.3.- Compilando para Mltiples Arquitecturas


Puede compilar Bash para ms 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 versin 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 guin de comandos, configure desde el directorio fuente. Puede necesitar suministrar el argumento '--srcdir=RUTA' para indicarle a configure donde estn los ficheros fuente. configure buscar automticamente el cdigo 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 cdigo fuente. Despus de que haya instalado Bash para una arquitectura, utilice 'make distclean' antes de reconfigurar para otra arquitectura. Alternativamente, si su sistema soporta enlaces simblicos, puede utilizar el guin de comandos 'support/mkclone' para crear un rbol de construccin que tenga enlaces simblicos a cada fichero en el directorio fuente. A continuacin le mostramos un ejemplo que crea un directorio de construccin 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 construccin para otras arquitecturas.

10.4.- Nombres de Instalacin


Por defecto, 'make install' instalar en '/usr/local/bin', '/usr/local/man', etc. Puede especificar un prefijo de instalacin distinto de '/usr/local' proporcionando a configure la opcin '--prefix=RUTA', o especificando un valor para la variable de 'make' DESTDIR cuando ejecute 'make install'. Puede especificar prefijos de instalacin separados para ficheros especficos de la arquitectura y ficheros independientes de la arquitectura. Si proporciona a configure la opcin '--exec-prefix=RUTA', 'make install' usar RUTA como prefijo para instalar programas y libreras. La documentacin y otros ficheros de datos seguirn usando el prefijo habitual.

Pgina 145

Captulo 10: Instalando Bash

10.5.- Especificando el Tipo de Sistema


Puede haber algunas caractersticas que configure no pueda determinar automticamente, pero sean necesarias para el tipo de anfitrin 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 anfitrin (host), tendr que proporcionarle este dato mediante la opcin '--host=TIPO'. 'TIPO' puede ser un nombre corto para el tipo de sistema, como 'sun4', o un nombre cannico con tres campos: 'CPU-COMPAA-SISTEMA' (p.e., 'i386-unknown-freebsd4.2'). Vea el fichero 'support/config.sub' para ms informacin sobre los valores posibles de cada campo.

10.6.- Compartiendo Valores por Defecto


Si desea establecer valores por defecto a los script configure para compartir, puede crear un guin 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, tambin puede establecer la variable de entorno CONFIG_SITE para indicar la localizacin de este guin de comandos. Una advertencia: El configure de Bash busca un guin de emplazamiento, pero no todos los guiones configure lo hacen.

10.7.- Controles de Operacin


configure 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 --quiet --silent -q

Imprime un resumen de las opciones de configure y finaliza.

No imprime mensajes sobre los chequeos que se estn realizando. Busca el cdigo fuente de Bash en el directorio dir. Normalmente configure puede determinar este directorio automticamente.

--srcdir=dir

--version

Imprime la versin de Autoconf usada para generar el script configure y finaliza.

configure tambin acepta algunas opciones ms, no muy utilizadas. 'configure help' imprime

la lista completa.

10.8.- Caractersticas Opcionales


El script configure de Bash tiene varias opciones '--enable-catacterstica' (activacaracterstica), donde catacterstica indica una parte opcional de Bash. Hay tambin 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
Pgina 146

Captulo 10: Instalando Bash

sin una caracterstica que est activada por defecto utilice '--disable-caracterstica'. A continuacin 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 versin de Bash de malloc en el directorio 'lib/malloc'. Este no es el mismo malloc que aparece en la libc de GNU, es una versin ms antigua derivada originalmente del malloc de BSD 4.2. Este malloc es muy rpido, pero gasta algn espacio en cada asignacin. Esta opcin est activada por defecto. El fichero 'NOTES' contiene una lista de sistemas para los que se debera desactivar, y configure desactiva esta opcin automticamente para varios sistemas.
--with-curses

Utiliza la librera curses en vez de la librera termcap. Debera suministrarse esta opcin si su sistema tiene una base de datos termcap inadecuada o incompleta.
--with-gnu-malloc

Un sinnimo para -with-bash-malloc.


--with-installed-readline[=PREFIJO]

Definir esto hace que Bash enlace con una versin de Readline instalada localmente en vez de con la versin en 'lib/readline'. Esta opcin slo 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 versin instalada de Readline si esta no est en el sistema estndar de directorios include y library. Si PREFIJO es no, Bash enlaza con la versin en 'lib/readline'. Si se asigna cualquier otro valor a PREFIJO, configure considera este valor como una ruta de directorios y buscar la versin instalada de Readline en subdirectorios de dicho directorio (los ficheros include en PREFIJO/include y los library en PREFIJO/lib). --with-purify Define esto para usar el comprobador de asignacin de memoria de Prify proporcionado por Rational Software. --enable-minimal-config Esto produce una shell con capacidades mnimas, 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 caractersticas de tiempo de ejecucin.
--enable-largefile

Activa el soporte para ficheros grandes si el sistema operativo requiere opciones especiales de compilacin para construir programas que puedan acceder a ficheros de gran tamao. Est activado por defecto si el sistema operativo proporciona soporte para ficheros grandes.
Pgina 147

Captulo 10: Instalando Bash

--enable-profiling Construye un binario de Bash que produce informacin autobiogrfica para ser procesada por gprof cada vez que se ejecuta.
--enable-static-link

Esto produce que Bash se enlace estticamente, si se est utilizando gcc. Esto se puede utilizar para construir una versin para usar como shell del administrador. Se puede utilizar la opcin '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' estn activadas por defecto, a menos que el sistema operativo no las soporte.
--enable-alias

Permite la expansin de alias e incluye los comandos internos alias y unalias (vea la Seccin 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 Seccin 3.2.4.1 [Construcciones de Bucle]).
--enable-array-variables

Incluye soporte para variables de shell de tipo array unidimensional (vea la Seccin 6.7 [Arrays]).
--enable-bang-history

Incluye soporte para la sustitucin de la historia tipo csh (vea la Seccin 9.3 [Interaccion con la Hisotria]).
--enable-brace-expansion

Incluye expansin de llaves tipo csh ( b{a,b}c bac bbc ). Vea la Seccin 3.5.1 [Expansin de Llaves] para una descripcin completa.
--enable-casemod-attributes

Incluye soporte para atributos de modificacin de maysculas y minsculas en el comando interno declare y en las sentencias de asignacin. Las variables con el atributo uppercase, por ejemplo, tendrn sus valores convertidos a maysculas.
--enable-casemod-expansion

Incluye soporte para expansiones de palabra con modificacin de maysculas y minsculas.


--enable-command-timing

Incluye soporte para reconocer time como una palabra reservada y para mostrar estadsticas de tiempo para la tubera que sigue a time (vea la Seccin 3.2.2 [Tuberas]). Esto permite que tanto las tuberas como los comandos internos y las funciones sean cronometrados.
--enable-cond-command

Incluye soporte para el comando condicional [[. (Vea la Seccin 3.2.4.2 [Construcciones Condicionales]).
Pgina 148

Captulo 10: Instalando Bash

--enable-cond-regexp

Incluye soporte para encajar expresiones regulares POSIX utilizando el operador binario '=~' en el comando condicional [[. (vea la Seccin 3.2.4.2 [Construcciones Condicionales]).
--enable-coprocesses

Incluye soporte para coprocesos y la palabra reservada coproc (vea la Seccin 3.2.2 [Tuberas]).
--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 Seccin 6.8 [La Pila de Directorios]).
--enable-disabled-builtins

Permite que se invoque a los comandos internos mediante 'builtin xxx' incluso despus de que xxx haya sido desactivado utilizando 'enable -n xxx'. Vea la Seccin 4.2 [Comandos Internos de Bash], para obtener ms detalles de los comandos internos builtin y enable.
--enable-dparen-arithmetic

Incluye soporte para el comando (( )) (vea la Seccin 3.2.4.2 [Construcciones Condicionales]).


--enable-extended-glob

Incluye soporte para las caractersticas de ajuste de patrones extendidos descritos anteriormente bajo la Seccin 3.5.8.1 [Concordancia de Patrones]).
--enable-extended-glob-default

Establece el valor por defecto de la opcin de shell extglob descrita anteriormente bajo la seccin 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 Seccin 4.2 [Comandos Internos de Bash]).
--enable-history

Incluye la historia de comandos y los comandos internos fc e history (vea la Seccin 9.1 [Caractersticas de Historia de Bash]).
--enable-job-control

Esto activa las caractersticas de control de tareas (vea el Captulo 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


Pgina 149

Captulo 10: Instalando Bash

/dev/udp/host/port cuando se utiliza en redirecciones (vea la Seccin 3.6 [Redirecciones]).


--enable-process-substitution

Esto activa la sustitucin de procesos (vea la Seccin 3.5.6 [Sustitucin de Procesos]) si el sistema operativo lo soporta.
--enable-progcomp

Activa las caractersticas de completado programable (vea la Seccin 8.6 [Completado Programable]). Si Readline no est activado, esta opcin no tiene ningn efecto.
--enable-prompt-string-decoding

Activa la interpretacin de varios caracteres escapados con barra invertida en las cadenas de prompt $PS1 , $PS2 , $PS3 y $PS4 . Vea la Seccin 6.9 [Imprimiendo un Promp], para una lista completa de secuencias de escape en cadenas de prompt.
--enable-readline

Incluye soporte para la edicin de la lnea de comandos y de la historia con la versin de Bash de la librera Readline (vea el Captulo 8 [Edicin de la Lnea 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 Seccin 6.10 [La Shell Restringida], para una descripcin del modo restringido.
--enable-separate-helpfiles

Utiliza ficheros externos para la documentacin 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 estndar POSIX (vea la Seccin 6.11 [El modo POSIX de Bash]).
--enable-usg-echo-default Un sinnimo 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 opcin '-e'. Esto establece el valor por defecto de la opcin de shell xpg_echo a on, lo que hace que el echo de Bash se comporte de forma ms parecida a la versin especificada por la Especificacin nica de Unix versin 3. Vea la Seccin 4.2 [Comandos Internos de Bash], para una descripcin 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
Pgina 150

Captulo 10: Instalando Bash

modificadas; tenga cuidado de las consecuencias de hacerlo. Lea los comentarios asociados con cada definicin para obtener ms informacin sobre sus efectos.

Pgina 151

Apndice A: Informando de errores

Apndice A: Informando de errores


Por favor informe sobre todos los errores que encuentre en Bash. Pero primero debera asegurarse de que realmente es un error, y que este aparece en la ltima versin de Bash. La ltima versin 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 solucin, le invitamos a que nos la comunique. Las sugerencias e informes de errores 'de filosofa' se pueden enviar a bug-bash@gnu.org o al grupo de Usenet gnu.bash.bug. Todos los informes de errores deben incluir:. El nmero de versin de Bash El hardware y el sistema operativo. El compilador usado para compilar Bash. Una descripcin del comportamiento del error. Una receta o un breve guin de comandos que manifieste el error y sea til para reproducirlo. bashbug inserta los tres primeros puntos automticamente en la plantilla que proporciona para rellenar el informe de error. Por favor, enva todos los informes concernientes a este manual a chet.ramey@case.edu2. (N. de T.: el correo anterior es para la versin en ingls de este manual, para enviar sugerencias o correcciones a la traduccin en espaol utilice: traduccionBash41@gmail.com)

2 Para errores en la versin original en ingls. Pgina 152

Apndice B: Diferencias Principales con la Shell de Bourne

C.2.- Diferencias Principales con la Shell de Bourne


Bash implementa esencialmente la gramtica, la expansin de parmetros y variables, la redireccin y el entrecomillado de la misma forma que lo hace la Shell Bourne. Bash utiliza el estndar POSIX como especificacin para implementar estas caractersticas. Hay algunas diferencias entre la shell Bourne tradicional y Bash; esta seccin detalla rpidamente las diferencias importante. Algunas de estas diferencias se explican en mayor detalle en secciones anteriores. Esta seccin utiliza la versin de sh incluida en SVR4.2 (la ltima versin de la histrica shell de Bourne) como base de la comparacin. Bash es conforme al estndar POSIX, incluso cuando la especificacin POSIX difiere del comportamiento tradicional de sh (vea la Seccin 6.11 [El Modo POSIX de Bash]). Bash tiene opciones de invocacin multi-caracter (vea la Seccin 6.1 [Invocando a Bash]). Bash tiene edicin de lnea de comandos (vea el Captulo 8 [Edicin de la Lnea de Comandos]) y el comando interno bind. Bash proporciona un mecanismo de completado programable de palabras (vea la Seccin 8.6 [Completado Programable]), y los comandos internos complete, compgen, y compopt para su manipulacin. Bash tiene historia de comandos (vea la Seccin 9.1 [Caractersticas de Historia de Bash]) y los comandos internos history y fc para su manipulacin. La lista de historia de Bash mantiene informacin de marca de tiempo y utiliza el valor de la variable HISTTIMEFORMAT para mostrarla. Bash implementa expansin de historia estilo csh (vea la Seccin 9.3 [Interaccin con la Historia]). Bash tiene variables de tipo array unidimensional (vea la Seccin 6.7 [Arrays], junto con la expansin de variables y la sintaxis de asignacin 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 Seccin 3.1.2.4 [Entrecomillado tipo ANSI-C]). Bash soporta la sintaxis de entrecomillado $... para hacer traducciones especficas de la localizacin a los caracteres encerrados entre comillas dobles. Las opciones de invocacin '-D', '--dump-strings' y '--dump-po-strings' listan las cadenas traducibles que se encuentran en un guin de comandos (vea la Seccin 3.1.2.5 [Traducciones Locales] Bash implementa la palabra clave ! Para negar el valor devuelto por una tubera (vea la Seccin 3.2.2 [Tuberas]). Muy til cuando una sentencia if necesita actuar slo si una comprobacin falla. La opcin de Bash '-o pipefail' de set produce que una tubera devuelva un estado de error si cualquiera de sus comando falla. Bash tiene la palabra reservada time y cronometra comandos (vea la Seccin 3.2.2 [Tuberas]). Se puede controlar la impresin de las estadsticas de tiempo con la variable TIMEFORMAT . Bash implementa el comando aritmtico for (( expr1 ; expr2 ; expr3 )), similar al del lenguaje C (vea la Seccin 3.2.4.1 [Construcciones Cclicas]).
Pgina 153

Apndice B: Diferencias Principales con la Shell de Bourne

Bash incluye el comando compuesto select, que permite la generacin de mens simples (vea la Seccin 3.2.4.2 [Construcciones Condicionales]). Bash incluye el comando compuesto [[, que incluye las comprobaciones condicionales como parte de la gramtica de la shell (vea la Seccin 3.2.4.2 [Construcciones Condicionales]), incluyendo ajuste opcional de expresiones regulares. Bash proporciona ajuste insensible a maysculas y minsculas de forma opcional para las construcciones case y [[. Bash incluye expansin de llaves (vea la Seccin 3.5.1 [Expansin de Llaves]) y expansin de tildes (vea la Seccin 3.5.2 [Expansin de Tildes]). Bash implementa los alias de comandos y los comandos internos alias y unalias (vea la Seccin 6.6 [Alias]). Bash proporciona aritmtica de shell, el comando compuesto (( (vea la Seccin 3.2.4.2 [Construcciones Condicionales) y expansin aritmtica (vea la Seccin 6.5 [Aritmtica de la Shell]). Las variables presentes en el entorno inicial de la shell se exportan automticamente a los procesos hijo. La shell Bourne normalmente no hace esto a menos que las variables se marquen explcitamente usando el comando export. Bash soporta el operador de asignacin '+=', que aade al valor actual de la variable nombrada en el lado izquierdo de la expresin. Bash incluye las expansiones de eliminacin de patrones POSIX '%', '#' y '%%' para eliminar subcadenas al inicio o al final de los valores de las variables (vea la Seccin 3.5.3 [Expansin de Parmetros de Shell]). Soporta la expansin ${#xx} que devuelve la longitud de ${xx}, si est soportada (vea la Seccin 3.5.3 [Expansin de Parmetros de Shell]). Presenta la expansin ${var:desplazamiento[:longitud]} , que expande la subcadena contenida en var a una subcadena de longitud igual a longitud comenzando en desplazamiento (vea la Seccin 3.5.3 [Expansin de Parmetros de Shell]). Soporta la expansin ${var/[/]patrn[/reemplazo]} , la cual busca el patrn en el valor de var y lo sustituye por reemplazo, si est disponible (vea la Seccin 3.5.3 [Expansin de Parmetros de Shell]). Soporta la expansin ${!prefijo}* que expande a los nombres de todas las variables de shell cuyos nombres comienzan con prefijo (vea la Seccin 3.5.3 [Expansin de Parmetros de Shell]). Bash presenta expansin indirecta de variables utilizando ${palabra} (vea la Seccin 3.5.3 [Expansin de Parmetros de Shell]). Bash puede expandir los parmetros posicionales posteriores al $9 utilizando ${num} . Implementa la sustitucin de comandos de tipo POSIX $( ) (vea la Seccin 3.5.4 [Sustitucin de Comandos]), y la prefiere sobre la de la shell Bourne `` (la cual tambin est implementada por compatibilidad hacia atrs). Bash tiene sustitucin de procesos (vea la Seccin 3.5.6 [Sustitucin de Procesos]). Bash asigna automticamente variables que proporcionan informacin sobre el usuario actual (UID, EUID y GROUPS), el anfitrin actual (HOSTTYPE, OSTYPE, MACHTYPE y
Pgina 154

Apndice B: Diferencias Principales con la Shell de Bourne

HOSTNAME), y la instancia de Bash que est en ejecucin (BASH, BASH_VERSION y BASH_VERSINFO). Vea la Seccin 5.2 [Variables de Bash], para obtener ms detalles.

Se utiliza la variable IFS para separar nicamente los resultados de la expansin, no todas las palabras (vea la Seccin 3.5.7 [Separacin de Palabras]). Esto da por solucionado un antiguo agujero de seguridad en la shell. Bash implementa el juego completo de operadores de expansin de nombres de fichero de POSIX, incluyendo clases de carcter, clases de equivalencia y smbolos de intercalado (vea la Seccin 3.5.8 [Expansin de Nombres de Fichero]). Bash implementa las caractersticas de concordancia de patrones extendidos cuando la opcin extglob est activada (vea la Seccin 3.5.8.1 [Concordancia de Patrones]). Es posible tener una variable y una funcin 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 tambin se pueden escribir tiles funciones recursivas (vea la Seccin 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 Seccin 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 expansin de nombres de fichero en los nombres de fichero especificados como operandos para los operadores de redireccin de entrada y salida (vea la Seccin 3.6 [Redirecciones]). Bash contiene el operador de redireccin '<>', permitiendo que un fichero sea abierto tanto para lectura como para escritura, y el operador de redireccin '&>', para dirigir la salida estndar y la salida de error estndar al mismo fichero (vea la Seccin 3.6 [Redirecciones]). Bash incluye el operador de redireccin '<<<', permitiendo utilizar una cadena como la entrada estndar para un comando. Bash implementa los operadores de redireccin '[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 redireccin (vea la Seccin 3.6 [Redirecciones]). Bash puede abrir conexiones de red a mquinas y servicios arbitrarios con los operadores de redireccin (vea la Seccin 3.6 [Redirecciones]). Est disponible la opcin noclobber para evitar sobreescribir ficheros existentes con la redireccin de la salida (vea la Seccin 4.3.1 [El Comando Interno Set]). El operador de redireccin '>|' se puede utilizar para anular la opcin noclobber. Los comandos internos de Bash cd y pwd (vea la Seccin 4.1 [Comandos Internos de la Shell]) toman las opciones '-L' y '-P' para intercambiar entre los modos fsico y lgico. Bash permite que una funcin sobreescirba un comando interno con el mismo nombre, y proporciona acceso a la funcionalidad de ese comando interno dentro de la funcin mediante los comandos internos builtin y command (vea la Seccin 4.2 [Comandos Internos de Bash]).
Pgina 155

Apndice B: Diferencias Principales con la Shell de Bourne

El comando interno command permite deshabilitar selectivamente funciones cuando se est realizando una bsqueda de comandos (vea la Seccin 4.2 [Comandos Internos de Bash]). Los comandos internos individuales se pueden activar o desactivar utilizando el comando interno enable (vea la Seccin [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 Seccin 4.1 [Comandos Internos de Bash]). Las funciones se pueden exportar a los hijos mediante el entorno utilizando 'export -f' (vea la Seccin 3.3 [Funciones de la Shell]). Los comandos internos de Bash export, readonly y declare pueden tomar la opcin '-f' para actuar en funciones de shell, la opcin '-p' para mostrar variables con varios atributos establecidos en un formato que pueda ser utilizado como entrada de la shell, la opcin ' -n' para eliminar varios atributos de variables, y argumentos 'nombre=valor' para establecer atributos de variable y valores simultneamente. 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 Seccin 4.1 [Comandos Internos de la Shell Bourne]). Bash incluye un comando interno help para referenciar rpidamente a las caractersticas de la shell (vea la Seccin 4.2 [Comandos Internos Bash]). Est disponible el comando interno printf para mostrar salida formateada (vea la Seccin 4.2 [Comandos Internos de Bash]). El comando interno read (vea la Seccin 4.2 [Comandos Internos de Bash]) leer una lnea terminada en '\' con la opcin '-r', y usar la variable REPLY por defecto si no se suministran argumentos de tipo opcin. El comando interno read de Bash tambin tiene opciones adicionales para controlar la entrada: la opcin '-s' desactivar la impresin (el eco) de los caracteres introducidos conforme son ledos, la opcin '-t' permitir a read expirar si la entrada no se produce en un tiempo especificado por un nmero de segundos, la opcin '-n' permitir leer nicamente un nmero especificado de caracteres en vez de una lnea completa, y la opcin '-d' leer hasta que se introduzca un determinado carcter en vez de una nueva lnea. Se puede utilizar el comando interno return para abortar la ejecucin de los guiones de comandos ejecutados con los comandos internos . o source (vea la Seccin 4.1 [Comandos Internos de la Shell Bourne]). Bash incluye el comando interno shopt para obtener un control ms detallado de las capacidades opcionales de la shell (vea la Seccin 4.3.2 [El Comando Interno Shopt]), y permite que estas opciones se establezcan o se elimien en la invocacin de la shell (vea la Seccin 6.1 [Invocando a Bash]). Bash tiene mucho ms comportamiento opcional controlable con el comando interno set (vea la Seccin 4.3.1 [El Comando Interno Set]). La opcin '-x' (xtrace) muestra otros comandos distintos de los comandos simples cuando se realiza una traza de ejecucin (vea la Seccin 4.3.1 [El Comando Interno Set]). El comando interno test (vea la Seccin 4.1 [Comandos Internos de la Shell Bourne]) es
Pgina 156

Apndice B: Diferencias Principales con la Shell de Bourne

ligeramente diferente al implementado por el algoritmo POSIX, el cual especifica el comportamiento basado en el nmero de argumentos. Bash incluye el comando interno caller, que muestra el contenido de cualquier llamada a subrutina activa (una funcin de shell o un guin ejecutado con los comandos internos . o source). Esto hace posible al depurador de Bash. El comando interno trap (vea la Seccin 4.1 [Comandos Internos de la Shell Bourne]), permite la especificacin de una pseudo-seal 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 aritmtico, y antes del primer comando ejecutado en una funcin de shell. Las funciones de shell no heredan la trampa DEBUG a menos que la funcin tenga el atributo trace o se haya activado la opcin functrace utilizando el comando interno shopt. La opcin de shell extdebug tiene efectos adicionales en la trampa DEBUG. El comando interno trap (vea la Seccin 4.1 [Comandos Internos de la Shell Bourne]) permite especificar una pseudo-seal ERR, similar a EXIT y DEBUG. Los comandos especificados con una trampa ERR se ejecutan despus 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 opcin -o errtrace del comando interno set est activada. El comando interno trap (vea la Seccin 4.1 [Comandos Internos de la Shell Bourne]), permite especificar una pseudo-seal RETURN, similar a EXIT y DEBUG. Los Comandos especificados con una trampa RETURN se ejecutan antes de que la ejecucin continue tras la funcin 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 funcin el atributo trace o se haya activado la opcin functrace utilizando el comando interno shopt. El comando interno type es ms amplio y proporciona ms informacin sobre los nombres que encuentra (vea la Seccin 4.2 [Comandos Internos de Bash]). El comando interno umask de Bash permite una opcin '-p' que produce que la salida sea mostrada de forma que esta pueda ser reutilizada como entrada (vea la Seccin 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 Seccin 6.8 [La Pila de Directorios]). Bash tambin 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 Seccin 6.9 [Imprimiendo un Prompt]). El modo restringido de Bash es ms til (vea la Seccin 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 Seccin 7.2 [Comandos Internos de Control de Tareas]) o suprimir el envo de la seal SIGHUP a una tarea cuando la shell finaliza como resultado de un SIGHUP. Bash incluye varias caractersticas para soportar un depurador aislado para los guiones de comandos de shell.
Pgina 157

Apndice B: Diferencias Principales con la Shell de Bourne

La shell SVR4.2 tiene dos comandos internos relacionados con privilegios (mldmode y priv) que no estn presente en Bash. Bash no tiene los comandos internos stop o newgrp. Bash no utiliza la variable SHACCT ni realiza estadsticas de la shell. El shell SVR4.2 utiliza una variable TIMEOUT similar a la TMOUT utilizada por Bash. Se pueden encontrar otras caractersticas nicas de Bash en el Captulo 6 [Caractersticas de Bash].

B.1.- Diferencias de Implementacin con la Shell SVR4.2


Puesto que Bash es una implementacin 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 insertara silenciosamente la comilla de cierre necesaria al llegar al EOF bajo ciertas circunstancias. Esto puede ser la causa de algunos errores difciles de encontrar. La shell SVR4.2 utiliza un burdo esquema de gestin de memoria basado en atrapar SIGSEGV. Si la shell se inicia desde un proceso con la seal SIGSEGV bloqueada (p.e., utilizando la llamada a la funcin system() de la librera C), podra comportarse de forma incorrecta. En un cuestionable intento de seguridad, la shell SVR4.2, cuando es invocada sin la opcin '-p', modificar sus UID y GID real y efectivo si hay menos de algn valor mgico de umbral, generalmente 100. Esto puede llevar a resultados inesperados. La shell SVR4.2 no permite a los usuarios atrapar las seales 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 mltiples argumentos de opcin cuando se invoca (-x -v); la shel SVR4.2 permita nicamente un argumento opcin (-xv). De hecho, algunas versiones de la shell fallan estrepitosamente si el segundo argumento comienza con un '-'. La shell SVR4.2 finaliza un guin de comandos si cualquier comando interno falla; Bash finaliza un guin de comandos slo si falla alguno de los comandos internos especiales de POSIX, y slo para ciertos fallos, cmo se enumera en el estndar POSIX. La shell SVR4.2 se comporta de forma diferente cuando se invoca con jsh (esto activa el control de tareas).

Pgina 158

Apndice C: Licencia de Documentacin Libre de GNU (Versin Original)

Apndice C: GNU Free Documentation License


Version 1.3, 3 November 2008 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Copyright http://fsf.org/ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

C.0.- PREAMBLE
The purpose of this License is to make a manual, textbook, or other functional and useful document free in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or non/commercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of copyleft, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

C.1.- APPLICABILITY AND DEFINITIONS


This 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 Documents 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.
Pgina 159

Apndice C: Licencia de Documentacin Libre de GNU (Versin 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 FrontCover 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 machinegenerated 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 works 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 COPYING


You 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
Pgina 160

Apndice C: Licencia de Documentacin Libre de GNU (Versin 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 QUANTITY


If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Documents 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.- MODIFICATIONS
You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for
Pgina 161

Apndice C: Licencia de Documentacin Libre de GNU (Versin 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 Documents 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 Versions 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 partiesfor example, statements of peer review

Pgina 162

Apndice C: Licencia de Documentacin Libre de GNU (Versin 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 DOCUMENTS


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


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


A 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 compilations 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
Pgina 163

Apndice C: Licencia de Documentacin Libre de GNU (Versin 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 Documents 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.- TRANSLATION
Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled Acknowledgements, Dedications, or History, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

D.0.1.- TERMINATION
You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright 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 LICENSE


The 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
Pgina 164

Apndice C: Licencia de Documentacin Libre de GNU (Versin 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 proxys 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 documents


To 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.
Pgina 165

Apndice D: Licencia de Documentacin Libre de GNU

Apndice D: Licencia de Documentacin Libre de GNU (Traduccin)


Versin 1.3, 3 Noviembre 2008 This 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 traduccin no oficial de la GNU Free Document License a Espaol (Castellano). No ha sido publicada por la Free Software Foundation y no establece legalmente los trminos de distribucin para trabajos que usen la GFDL (slo el texto de la versin original en Ingls de la GFDL lo hace). Sin embargo, esperamos que esta traduccin ayude a los hispanohablantes a entender mejor la GFDL. La versin original de la GFDL esta disponible en la Free Software Foundation. Esta traduccin est basada en una de la versin 1.2 por Joaqun 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 distribucin de copias literales de este documento de licencia, pero no se permiten cambios.[1]

D.0.- PREMBULO
El propsito 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 trmino, 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 Pblica General de GNU, que es una licencia tipo copyleft diseada para el software libre. Hemos diseado esta Licencia para usarla en manuales de software libre, ya que el software libre necesita documentacin 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 temtica 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 DEFINICIONES


Esta 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 trminos de esta Licencia. Tal nota garantiza en cualquier lugar del mundo, sin pago de derechos y sin lmite de tiempo, el uso de dicho trabajo segn 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 segn la ley de propiedad intelectual. Una Versin Modificada del Documento significa cualquier trabajo que contenga el
Pgina 166

Apndice D: Licencia de Documentacin Libre de GNU

Documento o una porcin del mismo, ya sea una copia literal o con modificaciones y/o traducciones a otro idioma. Una Seccin Secundaria es un apndice con ttulo o una seccin preliminar del Documento que trata exclusivamente de la relacin 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 matemticas, una Seccin Secundaria puede no explicar nada de matemticas). La relacin puede ser una conexin histrica con el tema o temas relacionados, o una opinin legal, comercial, filosfica, tica o poltica acerca de ellos. Las Secciones Invariantes son ciertas Secciones Secundarias cuyos ttulos son designados como Secciones Invariantes en la nota que indica que el documento es liberado bajo esta Licencia. Si una seccin no entra en la definicin 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 mquina, representada en un formato cuya especificacin est disponible al pblico en general, apto para que los contenidos puedan ser vistos y editados directamente con editores de texto genricos o (para imgenes compuestas por puntos) con programas genricos de manipulacin de imgenes o (para dibujos) con algn editor de dibujos ampliamente disponible, y que sea adecuado como entrada para formateadores de texto o para su traduccin automtica 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 diseado 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 estn ASCII puro sin marcaje, formato de entrada de Texinfo, formato de entrada de LaTeX, SGML o XML usando una DTD disponible pblicamente, y HTML, PostScript o PDF simples, que sigan los estndares y diseados 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 ledos y editados nicamente en procesadores de palabras propietarios, SGML o XML para los cules las DTD y/o herramientas de procesamiento no estn ampliamente disponibles, y HTML, PostScript o PDF generados por algunos procesadores de palabras slo como salida. La Portada significa, en un libro impreso, la pgina de ttulo, ms las pginas 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 pgina de portada como tal, Portada significa el texto cercano a la aparicin ms prominente del ttulo 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 pblico. Una seccin Titulada XYZ significa una parte del Documento cuyo ttulo es precisamente
Pgina 167

Apndice D: Licencia de Documentacin Libre de GNU

XYZ o contiene XYZ entre parntesis, a continuacin de texto que traduce XYZ a otro idioma (aqu XYZ se refiere a nombres de seccin especficos mencionados ms abajo, como Agradecimientos, Dedicatorias , Aprobaciones o Historia). Conservar el Ttulo de tal seccin cuando se modifica el Documento significa que permanece una seccin Titulada XYZ segn esta definicin.[3] El Documento puede incluir Limitaciones de Garanta cercanas a la nota donde se declara que al Documento se le aplica esta Licencia. Se considera que estas Limitaciones de Garanta estn incluidas, por referencia, en la Licencia, pero slo en cuanto a limitaciones de garanta: cualquier otra implicacin que estas Limitaciones de Garanta puedan tener es nula y no tiene efecto en el significado de esta Licencia.

D.2.- COPIA LITERAL


Usted 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 aada ninguna otra condicin a las expuestas en esta Licencia. Usted no puede usar medidas tcnicas para obstruir o controlar la lectura o copia posterior de las copias que usted haga o distribuya. Sin embargo, usted puede aceptar compensacin a cambio de las copias. Si distribuye un nmero suficientemente grande de copias tambin deber seguir las condiciones de la seccin 3. Usted tambin puede prestar copias, bajo las mismas condiciones establecidas anteriormente, y puede exhibir copias pblicamente.

D.3.- COPIADO EN CANTIDAD


Si 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 ttulo completo con todas las palabras igualmente prominentes y visibles. Adems puede aadir otro material en las cubiertas. Las copias con cambios limitados a las cubiertas, siempre que conserven el ttulo 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 pginas adyacentes. Si Usted publica o distribuye copias Opacas del Documento cuya cantidad exceda las 100, debe incluir una copia Transparente, que pueda ser leda por una mquina, con cada copia Opaca, o bien mostrar, en cada copia Opaca, una direccin de red donde cualquier usuario de la misma tenga acceso por medio de protocolos pblicos y estandarizados a una copia Transparente del Documento completa, sin material adicional. Si usted hace uso de la ltima opcin, deber tomar las medidas necesarias, cuando comience la distribucin de las copias Opacas en cantidad, para asegurar que esta copia Transparente permanecer accesible en el sitio establecido por lo menos un ao despus de la ltima vez que distribuya una copia Opaca de esa edicin al pblico (directamente o a travs de sus agentes o distribuidores).
Pgina 168

Apndice D: Licencia de Documentacin Libre de GNU

Se solicita, aunque no es requisito, que se ponga en contacto con los autores del Documento antes de redistribuir gran nmero de copias, para darles la oportunidad de que le proporcionen una versin actualizada del Documento.

D.4.- MODIFICACIONES
Puede copiar y distribuir una Versin Modificada del Documento bajo las condiciones de las secciones 2 y 3 anteriores, siempre que usted libere la Versin Modificada bajo esta misma Licencia, con la Versin Modificada haciendo el rol del Documento, por lo tanto dando licencia de distribucin y modificacin de la Versin Modificada a quienquiera posea una copia de la misma. Adems, debe hacer lo siguiente en la Versin Modificada: A. Usar en la Portada (y en las cubiertas, si hay alguna) un ttulo distinto al del Documento y de sus versiones anteriores (que deberan, si hay alguna, estar listadas en la seccin de Historia del Documento). Puede usar el mismo ttulo de versiones anteriores al original siempre y cuando quien las public originalmente otorgue permiso. B. Listar en la Portada, como autores, una o ms personas o entidades responsables de la autora de las modificaciones de la Versin 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 Versin Modificada. D. Conservar todas las notas de copyright del Documento. E. Aadir una nota de copyright apropiada a sus modificaciones, adyacente a las otras notas de copyright. F. Incluir, inmediatamente despus de las notas de copyright, una nota de licencia dando el permiso para usar la Versin Modificada bajo los trminos de esta Licencia, como se muestra en el Apndice [Apndice] 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 modificacin de esta Licencia. I. Conservar la seccin Titulada Historia, conservar su Ttulo y aadirle un elemento que declare al menos el ttulo, el ao, los nuevos autores y el editor de la Versin Modificada, tal como figuran en la Portada. Si no hay una seccin Titulada Historia en el Documento, crear una estableciendo el ttulo, el ao, los autores y el editor del Documento, tal como figuran en su Portada, aadiendo adems un elemento describiendo la Versin Modificada, como se estableci en la oracin anterior. J. Conservar la direccin en red, si la hay, dada en el Documento para el acceso pblico 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 seccin Historia. Se puede omitir la ubicacin en red de un trabajo que haya sido publicado por lo menos cuatro aos antes que el Documento mismo, o si el editor original de dicha versin da permiso. K. En cualquier seccin Titulada Agradecimientos o Dedicatorias, conservar el Ttulo de la seccin y conservar en ella toda la sustancia y el tono de los agradecimientos y/o
Pgina 169

Apndice D: Licencia de Documentacin Libre de GNU

dedicatorias incluidas por cada contribuyente. L. Conservar todas las Secciones Invariantes del Documento, sin alterar su texto ni sus ttulos. Nmeros de seccin o el equivalente no son considerados parte de los ttulos de la seccin. M. Borrar cualquier seccin titulada Aprobaciones. Tales secciones no pueden estar incluidas en las Versiones Modificadas. N. No cambiar el ttulo de ninguna seccin existente a Aprobaciones ni a uno que entre en conflicto con el de alguna Seccin Invariante. O. Conservar todas las Limitaciones de Garanta. Si la Versin Modificada incluye secciones o apndices 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, aada sus ttulos a la lista de Secciones Invariantes en la nota de licencia de la Versin Modificada. Tales ttulos deben ser distintos de cualquier otro ttulo de seccin. Puede aadir una seccin titulada Aprobaciones, siempre que contenga nicamente aprobaciones de su Versin Modificada por otras fuentes --por ejemplo, observaciones de peritos o que el texto ha sido aprobado por una organizacin como la definicin oficial de un estndar. Puede aadir 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 Versin Modificada. Una entidad solo puede aadir (o hacer que se aada) un pasaje al Texto de Cubierta Delantera y uno al de Cubierta Trasera. Si el Documento ya incluye un textos de cubiertas aadidos previamente por usted o por la misma entidad que usted representa, usted no puede aadir otro; pero puede reemplazar el anterior, con permiso explcito 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 aprobacin de cualquier Versin Modificada.

D.5.- COMBINACIN DE DOCUMENTOS


Usted puede combinar el Documento con otros documentos liberados bajo esta Licencia, bajo los trminos definidos en la seccin 4 anterior para versiones modificadas, siempre que incluya en la combinacin 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 Limitacin de Garanta. El trabajo combinado necesita contener solamente una copia de esta Licencia, y puede reemplazar varias Secciones Invariantes idnticas por una sola copia. Si hay varias Secciones Invariantes con el mismo nombre pero con contenidos diferentes, haga el ttulo de cada una de estas secciones nico aadindole al final del mismo, entre parntesis, el nombre del autor o editor original de esa seccin, si es conocido, o si no, un nmero nico. Haga el mismo ajuste a los ttulos de seccin en la lista de Secciones Invariantes de la nota de licencia del trabajo combinado. En la combinacin, debe combinar cualquier seccin Titulada Historia de los documentos originales, formando una seccin Titulada Historia; de la misma forma combine cualquier seccin Titulada Agradecimientos, y cualquier seccin Titulada Dedicatorias. Debe borrar todas las secciones tituladas Aprobaciones.

Pgina 170

Apndice D: Licencia de Documentacin Libre de GNU

D.6.- COLECCIONES DE DOCUMENTOS


Puede hacer una coleccin 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 coleccin, siempre que siga las reglas de esta Licencia para cada copia literal de cada uno de los documentos en cualquiera de los dems 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 extrado, y siga esta Licencia en todos los dems aspectos relativos a la copia literal de dicho documento.

D.7.- AGREGACIN CON TRABAJOS INDEPENDIENTES


Una recopilacin que conste del Documento o sus derivados y de otros documentos o trabajos separados e independientes, en cualquier soporte de almacenamiento o distribucin, se denomina un agregado si el copyright resultante de la compilacin no se usa para limitar los derechos de los usuarios de la misma ms 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 seccin 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 electrnico de las cubiertas si el documento est en forma electrnica. En caso contrario deben aparecer en cubiertas impresas enmarcando todo el agregado.

D.8.- TRADUCCIN
La Traduccin es considerada como un tipo de modificacin, por lo que usted puede distribuir traducciones del Documento bajo los trminos de la seccin 4. El reemplazo las Secciones Invariantes con traducciones requiere permiso especial de los dueos de derecho de autor, pero usted puede aadir traducciones de algunas o todas las Secciones Invariantes a las versiones originales de las mismas. Puede incluir una traduccin de esta Licencia, de todas las notas de licencia del documento, as como de las Limitaciones de Garanta, siempre que incluya tambin la versin en Ingls de esta Licencia y las versiones originales de las notas de licencia y Limitaciones de Garanta. En caso de desacuerdo entre la traduccin y la versin original en Ingls de esta Licencia, la nota de licencia o la limitacin de garanta, la versin original en Ingls prevalecer. Si una seccin del Documento est Titulada Agradecimientos, Dedicatorias o Historia el requisito (seccin 4) de Conservar su Ttulo (Seccin 1) requerir, tpicamente, cambiar su ttulo.

D.9.- TERMINACIN
Usted no puede copiar, modificar, sublicenciar o distribuir el Documento salvo por lo permitido expresamente bajo esta Licencia. Cualquier intento en otra manera de copia, modificacin, sublicenciamiento, o distribucin de l es nulo, y dar por terminados automticamente sus derechos bajo esa Licencia. Sin embargo, si usted cesa toda violacin 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 explcita y finalmente termine su licencia, y (b) permanentemente, si el titular del
Pgina 171

Apndice D: Licencia de Documentacin Libre de GNU

copyright falla en notificarle de la violacin por algn medio razonable en un tiempo menor a 60 das despus del cese. Adems, su licencia proveniente de un titular del copyright particular queda restaurada permanentemente si el titular del copyright le notifica de la violacin por algn mtodo razonable, es la primera vez que usted ha recibido aviso de la violacin de esta Licencia (para cualquier trabajo) de ese titular del copyright, y usted remedia la violacin en un tiempo menor a 30 das despus de recibir dicho aviso. La terminacin de sus derechos bajo sta seccin 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 ningn derecho de usarlo.

D.9.1.- REVISIONES FUTURAS DE ESTA LICENCIA


De vez en cuando la Free Software Foundation puede publicar versiones nuevas y revisadas de la Licencia de Documentacin Libre GNU. Tales versiones nuevas sern similares en espritu a la presente versin, pero pueden diferir en detalles para solucionar nuevos problemas o intereses. Vea http://www.gnu.org/copyleft/. Cada versin de la Licencia tiene un nmero de versin que la distingue. Si el Documento especifica que se aplica una versin numerada en particular de esta licencia o cualquier versin posterior, usted tiene la opcin de seguir los trminos y condiciones de la versin especificada o cualquiera posterior que haya sido publicada (no como borrador) por la Free Software Foundation. Si el Documento no especifica un nmero de versin de esta Licencia, puede escoger cualquier versin que haya sido publicada (no como borrador) por la Free Software Foundation. Si el Documento especifica que un apoderado puede decidir qu versin futura de esta Licencia puede ser utilizada, esa frase de aceptacin del apoderado de una versin le autoriza permanentemente a escoger esa versin para el Documento.

D.10.- RE-LICENCIAMIENTO
Un "Sitio de Colaboracin Masiva Multiautor" (o "Sitio CMM") significa cualquier servidor World Wide Web que publique trabajos que puedan ser sujetos a copyright y que tambin provea medios prominentes para que cualquiera pueda editar esos trabajos. Una Wiki pblica que cualquiera puede editar es un ejemplo de tal servidor. Una "Colaboracin Masiva Multiautor" (o "CMM") contenida en el sitio significa cualquier coleccin 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 corporacin sin fines de lucro con base en San Francisco, California, as como versiones futuras copyleft de esa licencia publicada por esa misma organizacin. "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 algn otro lugar
Pgina 172

Apndice D: Licencia de Documentacin Libre de GNU

diferente a esta CMM, y subsecuentemente incorporado como un todo o parcialmente a la CMM, (1)no tena 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 CCBY-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: Cmo usar esta Licencia en sus documentos


Para 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 despus de la pgina de ttulo:
Copyright (c) AO SU NOMBRE. Se concede permiso para copiar, distribuir y/o modificar este documento bajo los trminos de la Licencia de Documentacin Libre de GNU, Versin 1.3 o cualquier otra versin 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 seccin 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 TTULOS, 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 combinacin de los tres, mezcle ambas alternativas para adaptarse a la situacin. Si su documento contiene ejemplos de cdigo de programa no triviales, recomendamos liberar estos ejemplos en paralelo bajo la licencia de software libre que usted elija, como la Licencia Pblica General de GNU (GNU General Public License), para permitir su uso en software libre.

D.12.- Notas:
[1]sta es la traduccin del Copyright de la Licencia, no es el Copyright de esta traduccin no autorizada. [2]La licencia original dice publisher, que es, estrictamente, quien publica, diferente de editor, que es ms bien quin prepara un texto para publicar. En castellano editor se usa para ambas cosas. [3]En sentido estricto esta licencia parece exigir que los ttulos sean exactamente Acknowledgements, Dedications, Endorsements e History, en ingls.

D.13.- Referencias:
1.http://www.gnu.org/copyleft/fdl.html 2.http://www.gnu.org/licenses/fdl-1.3-pdiff.ps (formato PostScript) 3.http://curso-sobre.berlios.de/gfdles/gfdles.html 4. http://creativecommons.org/licenses/by-sa/3.0/es/

Pgina 173

Apndice E: ndices

Apndice E: ndices

: .

E.1.- ndice de Comandos Internos de la Shell


help .................................................................... 56 history .............................................................. 137

: .......................................................................... 44 . .......................................................................... 44

jobs .................................................................. 103

K L

[ .......................................................................... 48

kill .................................................................... 104 let ....................................................................... 56 local ................................................................... 56 logout ................................................................. 56

A B

alias ................................................................... 51 bg ..................................................................... 103 bind .................................................................... 51 break .................................................................. 45 builtin ........................................................... 11, 52

M P

mapfile ............................................................... 56 popd ................................................................... 96 printf ................................................................... 57 pushd ................................................................. 96 pwd .................................................................... 47

caller .................................................................. 53 cd ....................................................................... 45 command ........................................................... 53 compgen .......................................................... 131 complete .......................................................... 132 compopt ........................................................... 135 continue ............................................................. 43

D E

read ................................................................... 58 readarray ........................................................... 59 readonly ............................................................. 47 return ................................................................. 48

declare ............................................................... 53 dirs ..................................................................... 95 disown ............................................................. 104 echo ................................................................... 55 enable ................................................................ 55 eval .................................................................... 45 exec ................................................................... 45 exit ..................................................................... 45 export ................................................................. 46

set ...................................................................... 61 shift .................................................................... 48 shopt .................................................................. 65 source ................................................................ 59 suspend ........................................................... 105

fc ...................................................................... 137 fg ...................................................................... 103

test ..................................................................... 48 times .................................................................. 49 trap .................................................................... 49 type .................................................................... 59 typeset ............................................................... 60

G H

getopts ............................................................... 46 hash ................................................................... 47

ulimit .................................................................. 60 umask ................................................................ 50 unalias ............................................................... 61 unset .................................................................. 51

Pgina 174

Apndice E: ndices

W !

wait .................................................................. 104

E.2.- ndice de Palabras Reservadas de la Shell


esac ................................................................... 19

! .................................................................... 26, 35

F I

[ ] { }

[[ ......................................................................... 20 ]] ......................................................................... 20 { ......................................................................... 22 } ......................................................................... 22

fi ......................................................................... 19 for ...................................................................... 18 function .............................................................. 23 if ......................................................................... 18 in ........................................................................ 19

select ................................................................. 20

case ................................................................... 19

then .................................................................... 19 time .................................................................... 16

D E

U V

do ....................................................................... 18 done ................................................................... 18 elif ...................................................................... 19 else .................................................................... 19

until .................................................................... 18 visible-stats ...................................................... 115

W $

while .................................................................. 18

_ !

E.3.- ndice de Parmetros y Variables

_ ......................................................................... 26 - ......................................................................... 25 ! .......................................................................... 26

$ ......................................................................... 26

0 ......................................................................... 26

A B

auto_resume .................................................... 106 BASH ................................................................. 74 BASH_ALIASES ................................................ 74 BASH_ARGC ..................................................... 74 BASH_ARGV ..................................................... 74 BASH_CMDS .................................................... 75 BASH_COMMAND ............................................ 75 BASH_ENV ........................................................ 75 BASH_EXECUTION_STRING ........................... 75 BASH_LINENO .................................................. 75 BASH_REMATCH ............................................. 75 BASH_SOURCE ................................................ 75 Pgina 175

? ......................................................................... 25

@ *

@ ....................................................................... 25 * ......................................................................... 25

# ......................................................................... 25

Apndice E: ndices BASH_SUBSHELL ............................................ 75 BASH_VERSINFO ............................................. 75 BASH_VERSION ............................................... 76 BASH_XTRACEFD ............................................ 76 BASHOPTS ....................................................... 74 BASHPID ........................................................... 74 bell-style .......................................................... 111 bind-tty-special-chars ....................................... 111 history-size ...................................................... 113 HISTSIZE .......................................................... 80 HISTTIMEFORMAT ........................................... 80 HOME ................................................................ 72 horizontal-scroll-mode ..................................... 113 HOSTFILE ......................................................... 80 HOSTNAME ...................................................... 80 HOSTTYPE ....................................................... 80

CDPATH ............................................................ 73 COLUMNS ......................................................... 76 comment-begin ................................................ 111 COMP_CWORD ................................................ 76 COMP_KEY ....................................................... 77 COMP_LINE ...................................................... 76 COMP_POINT ................................................... 76 COMP_TYPE ..................................................... 77 COMP_WORDBREAKS .................................... 77 COMP_WORDS ................................................ 77 completion-prefix-display-length ...................... 112 completion-query-items ................................... 112 COMPREPLY .................................................... 77 convert-meta .................................................... 112

IFS ..................................................................... 73 IGNOREEOF ..................................................... 80 input-meta ........................................................ 113 INPUTRC ........................................................... 80 isearch-terminators .......................................... 113

K L

keymap ............................................................ 113 LANG ................................................................. 80 LC_ALL .............................................................. 80 LC_COLLATE .................................................... 81 LC_MESSAGES .......................................... 15, 81 LC_NUMERIC ................................................... 81 LC_CTYPE ........................................................ 81 LINENO ............................................................. 81 LINES ................................................................ 81

D E

DIRSTACK ........................................................ 77 disable-completion ........................................... 112 editing-mode .................................................... 112 EMACS .............................................................. 77 enable-keypad ................................................. 112 EUID .................................................................. 78 expand-tilde ..................................................... 113

FCEDIT .............................................................. 78 FIGNORE .......................................................... 78 FUNCNAME ...................................................... 78

MACHTYPE ....................................................... 81 MAIL .................................................................. 73 MAILCHECK ...................................................... 81 MAILPATH ......................................................... 73 mark-modified-lines ......................................... 114 mark-symlinked-directories .............................. 114 match-hidden-files ........................................... 114 meta-flag .......................................................... 113

G H

GLOBIGNORE ................................................... 78 GROUPS ........................................................... 78 histchars ............................................................ 78 HISTCMD .......................................................... 78 HISTCONTROL ................................................. 79 HISTFILE ........................................................... 79 HISTFILESIZE ................................................... 79 HISTIGNORE .................................................... 79 history-preserve-point ...................................... 113

OLDPWD ........................................................... 81 OPTARG ........................................................... 73 OPTERR ............................................................ 81 OPTIND ............................................................. 73 OSTYPE ............................................................ 81 output-meta ..................................................... 114

page-completions ............................................ 114 PATH ................................................................. 73 PIPESTATUS .................................................... 82 POSIXLY_CORRECT ........................................ 82 PPID .................................................................. 82 Pgina 176

Apndice E: ndices PROMPT_COMMAND ...................................... 82 PROMPT_DIRTRIM .......................................... 82 PS1 .................................................................... 73 PS2 .................................................................... 74 PS3 .................................................................... 82 PS4 .................................................................... 82 PWD .................................................................. 82 SHLVL ............................................................... 83 show-all-if-ambiguous ...................................... 114 show-all-if-unmodified ...................................... 114 skip-completed-text .......................................... 115

R S

RANDOM ........................................................... 82 REPLY ............................................................... 82 revert-all-at-newline ......................................... 114 SECONDS ......................................................... 82 SHELL ............................................................... 83 SHELLOPTS ...................................................... 83

TEXTDOMAIN ................................................... 15 TEXTDOMAINDIR ............................................. 15 TIMEFORMAT ................................................... 83 TMOUT .............................................................. 83 TMPDIR ............................................................. 84

U V

UID .................................................................... 84 visible-stats ...................................................... 115

A B

E.4.- ndice de Funciones

D
dabbrev-expand () ........................................... 127 delete-char (C-d) .............................................. 122 delete-char-or-list() .......................................... 126 delete-horizontal-space () ................................ 124 digit-argument (M-0, M-1, , M--) ................... 125 display-shell-version (C-x C-v) ......................... 129 do-uppercase-version (M-a, M-b, M-x, ) ....... 127 downcase-word (M-l) ....................................... 123 dump-functions () ............................................. 128 dump-macros () ............................................... 129 dump-variables () ............................................. 129 dynamic-complete-history (M-TAB) ................. 127

abort (C-g) ....................................................... 127 accept-line (Nueva_lnea o Return) ................. 121 alias-expand-line () .......................................... 129 backward-delete-char (Rubout) ....................... 122 backward-kill-line (C-x Rubout) ........................ 123 backward-kill-word () ........................................ 124 backward-kill-word (M-DEL) ............................. 124 backward-word (M-b) ....................................... 121 beginning-of-history (M-<) ................................ 121 beginning-of-line (C-a) ..................................... 120

call-last-kbd-macro (C-x e) .............................. 127 capitalize-word (M-c) ....................................... 123 character-search (C-]) ...................................... 128 character-search-backward (M-C-]) ................. 128 clear-screen (C-l) ............................................. 121 complete (TAB) ................................................ 125 complete-command (M-!) ................................. 126 complete-filename (M-/) ................................... 126 complete-hostname (M-@) .............................. 126 complete-into-braces (M-{) .............................. 127 complete-username (M-~) ............................... 126 complete-variable (M-$) ................................... 126 copy-backward-word () .................................... 124 copy-forward-word () ........................................ 124 copy-region-as-kill () ........................................ 124

edit-and-execute-command (C-xC-e) .............. 130 end-kbd-macro (C-x )) ..................................... 127 end-of-history (M->) ......................................... 121 end-of-line (C-e) ............................................... 120 exchange-point-and-mark (C-x C-x) ................ 128

forward-backward-delete-char () ...................... 122 forward-char (C-f) ............................................ 120 forward-search-history (C-s) ............................ 121 forward-word (M-f) ........................................... 120

glob-complete-word (M-g) ................................ 129 glob-expand-word (C-x *) ................................. 129 glob-list-expansions (C-x g) ............................. 129 Pgina 177

Apndice E: ndices

H
historiy-and-alias-expand-line () ....................... 130 history-expand-line (M-^) ................................. 129 history-search-forward () .................................. 122

prefix-meta (ESC) ............................................ 127 previous-history (C-p) ...................................... 121

Q R

I J

quoted-insert (C-q o C-v) ................................. 122 re-read-init-file (C-x C-r) ................................... 127 redraw-current-line () ....................................... 121 reverse-search-history (C-r) ............................. 121 revert-line (M-r) ................................................ 128

insert-comment (M-#) ...................................... 128 insert-completions (M-*) ................................... 125 insert-last-argument (M-. o M-_) ...................... 130 jobs .................................................................. 104

kill-line (C-k) ..................................................... 123 kill-region () ...................................................... 124 kill-whole-line () ................................................ 123 kill-word (M-d) .................................................. 124

M N O P

magic-space () ................................................. 129 menu-complete () ............................................. 125 menu-complete-backward () ............................ 126 next-history (C-n) ............................................. 121 non-incremental-forward-search-history (M-n) . 122 non-incremental-reverse-search-history (M-p) . 121 operate-and-get-netx (C-o) .............................. 130 overwrite-mode () ............................................. 123 possible-command-completions (C-x !) ........... 127 possible-completions (M-?) .............................. 125 possible-filename-completions (C-x /) .............. 126 possible-hostname-completions (C-x @) ......... 126 possible-username-completions (C-x ~) .......... 126 possible-variable-completions (C-x $) .............. 126

self-insert (a, b, A, 1, !, ) ............................... 122 set-mark (C-@) ................................................ 128 shell-backward-word () .................................... 121 shell-expand-line (M-C-e) ................................ 129 shell-forward-word () ........................................ 121 shell-kill-word () ................................................ 124 skip-csi-sequence () ......................................... 128 start-kbd-macro (C-x () .................................... 127

tilde-expand (M-&) ........................................... 128 transpose-chars (C-t) ....................................... 123 transpose-words (M-t) ...................................... 123

undo (C-_ o C-x C-u) ....................................... 128 universal-argument () ....................................... 125 unix-filename-rubout () ..................................... 124 unix-line-discard (C-u) ..................................... 123 unix-word-rubout () .......................................... 124 upcase-word (M-u) ........................................... 123

yank (C-y) ........................................................ 125 yank-last-arg (M-. o M-_) ................................. 122 yank-nth-arg (M-C-y) ....................................... 122 yank-pop (M-y) ................................................. 125

Pgina 178

Вам также может понравиться