




























































































Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Manual de Referencia Bash
Tipo: Apuntes
1 / 178
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!





























































































Chet Ramey, Case Western Reserve University Brian Fox, Free Software Foundation Mario Piñar Ramírez (Traducción)
Esta es una traducción no autorizada de la Documentación de Referencia de Bash. Está basada en la Edición 4.1, para Bash versión 4.1, de Diciembre de 2009. La última versión original (en inglés) del Manual de Referencia de Bash se puede encontrar en el sitio oficial del programa GNU Bash: http://www.gnu.org/software/bash/bash.html Copyright © 1988–2009 Free Software Foundation, Inc. Se autoriza a copiar, distribuir y/o modificar este documento bajo los términos de la GNU Free Documentation License, Versión 1.3 o cualquier versión posterior publicada por la Free Software Foundation; sin Secciones Invariantes, sin los textos de Portada y sin los textos de Contraportada. Se incluye una copia de la licencia en la sección titulada “GNU Free Documentation License” en el Apéndice C, seguida por una traducción de la misma (Apéndice D) obtenida de: http://docs.danexlandia.com.mx/gfdl/gfdl_es.f.html Puede comunicar sugerencias o errores en la dirección [email protected] Página ii
This text is a brief description of the features that are present in the Bash shell (version 4.1, 23 December 2009). This is Edition 4.1, last updated 23 December 2009, of The GNU Bash Reference Manual, for Bash, Version 4.1. Copyright © 1988–2009 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover texts being “A GNU Manual”, and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled “GNU Free Documentation License”. (a) The FSF’s Back-Cover Text is: You are free to copy and modify this GNU manual. Buying copies from GNU Press supports the FSF in developing GNU and promoting software freedom.” Published by the Free Software Foundation 59 Temple Place, Suite 330, Boston, MA 02111- USA
Este texto es una breve descripción de las características que están presentes en la shell Bash (versión 4.1 de 23 de diciembre de 2009) Esta es la edición 4.1, actualizada por última vez el 23 de diciembre de 2009, del Manual de Referencia de GNU Bash para Bash Versión 4. Copyright © 1988-2009 Free Software Foundation, Inc. Se concede permiso para hacer y distribuir copias literales de este manual manteniendo el aviso de copyright y este aviso de autorización en todas las copias. Se autoriza a copiar, distribuir y/o modificar este documento bajo los términos de la GNU Free Documentation License, Versión 1.3 o cualquier versión posterior publicada por la Free Software Foundation; sin Secciones Invariantes, con la portada “A GNU Manual”, y con los textos de contra- portada como en el apartado (a) mostrado más abajo. Se incluye una copia de la licencia en la sección titulada “GNU Free Documentation License”. (a) El texto de contraportada de la FSF es: Eres libre de copiar y modificar este manual GNU. Comprar copias en la GNU Press da soporte a la FSF para continuar desarrollando GNU y promoviendo la libertad de software. Publicado por la Free Software Foundation 59 Temple Place, Suite 330 Boston, MA 02111- USA Página iv
Capítulo 1: Introducción shell se debe a los lenguajes de programación embebidos en ella. Como cualquier lenguaje de alto nivel, la shell proporciona variables, construcciones de control del flujo, entrecomillado y funciones. Las shells ofrecen características orientadas específicamente para el uso interactivo más que para aumentar el lenguaje de programación. Estas características interactivas incluyen control de tareas, edición de la linea de comandos, historia de comandos y alias. Cada una de estas caracterís- ticas son descritas en este manual. Página 10
Capítulo 2: Definiciones 2.- Definiciones Estas definiciones son usadas a lo largo de este manual POSIX Una familia de estándares libres basados en Unix. Bash se ve afectado principalmente por la parte Shell y Utilidades del estándar POSIX 1003.1. blanco (blank) Un carácter espacio o tabulador comando interno o builtin Un comando que es implementado internamente por la shell, en vez de por un programa ejecutable en algún lugar del sistema de ficheros. operadores de control Un token que realiza una función de control. Es una nueva linea o alguno de los siguientes: ‘||’, ‘&&’, ‘&’, ‘;’, ‘;;’, ‘|’, ‘|&’, ‘(’, o ‘)’. estado de salida El valor retornado por un comando a su llamador. Este valor está restringido a ocho bits, así que el valor máximo es 255. campo Una unidad de texto que es el resultado de una de las expansiones de la shell. Tras la expansión, cuando se ejecuta un comando, los campos resultantes se utilizan como nombre de comando y argumentos nombre de archivo Una cadena de caracteres usada para identificar un archivo. tarea Un juego de procesos que componen una tubería, y los procesos que descienden de estos, que están todos en el mismo grupo de procesos. control de tareas Un mecanismo por el cual los usuarios pueden parar (suspender) y reiniciar (reanudar) selectivamente la ejecución de procesos. metacaracter Un carácter que, cuando se encuentra sin entrecomillar, separa palabras. Un metaca- racter es un blanco o uno de los siguientes caracteres: ‘|’, ‘&’, ‘;’, ‘(’, ‘)’, ‘<’, o ‘>’. nombre Una palabra consistente únicamente en letras, números y caracteres de subrayado, y que comienza con una letra o un carácter de subrayado. Los nombres se usan como nombres de variables de shell y de funciones. También se le llama identificador. operador Un operador de control o un operador de redirección. Vea en la sección 3.6 [Redirec- ciones], una lista de operadores de redirección. Los operadores contienen al menos un Página 11
Capitulo 3: Características Básicas del Shell 3.- Características Básicas de la Shell Bash es un acrónimo para 'Bourne-Again Shell'. La shell Bourne es la shell Unix tradicional escrita originalmente por Stephen Bourne. Todos los comandos internos de la shell Bourne están disponibles en Bash. Las reglas para evaluación y entrecomillado están tomadas de la especificación POSIX para la shell Unix 'estándar'. Este capítulo resume brevemente los 'bloques de construcción' de la shell: comandos, estructuras de control, funciones de shell, parámetros de shell, expansiones de shell, redirecciones, que son un modo de dirigir la entrada y la salida desde y hacia un nombre de archivo, y la forma en la que la shell ejecuta comandos. 3.1.- Sintaxis de la 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 línea. En caso contrario, hablando de forma aproximada, la shell lee su entrada y divide esta en palabras y operadores, empleando las reglas de entrecomillado para seleccionar qué significado debe asignar a las palabras y caracteres. La shell luego analiza esos tokens en comandos y otras construcciones, elimina el significado especial de ciertas palabras o caracteres, expande otras, redirecciona la entrada y la salida según sea necesario, ejecuta los comandos especificados, espera por el estado de salida de los comandos, y pone disponible ese estado de salida para favorecer su inspección o procesamiento.
Lo que sigue es una breve descripción del modo en que trabaja la shell cuando esta lee y ejecuta un comando. Básicamente, la shell hace lo siguiente:
Capitulo 3: Características Básicas del Shell
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 expansión de parámetros. Cada uno de los metacaracteres de shell (vea el Capítulo 2 [Definiciones]) tiene un significado especial para el shell y debe ser entrecomillado si se representa a sí mismo. Cuando se está usando las habilidades de expansión de la historia de comandos (vea la Sección 9.3 [Interacciones con la Historia]), el carácter de expansión de la historia, normalmente '!', debe ser entrecomillado para prevenir la expansión de la historia. Vea la Sección 9.1 [Características de Historial de Bash], para más detalles concernientes a la expansión de la historia. Hay tres mecanismos de entrecomillado : El carácter de escape, las comillas simples y las comillas dobles. 3.1.2.1.- Carácter de Escape El carácter de escape consiste en una barra invertida sin entrecomillar ''. Esta mantiene el valor literal del carácter que le sigue, con la excepción de la nueva línea. Si aparece una pareja \nueva_linea esta es tratada como una continuación de línea (esto es, esta es eliminada del flujo de entrada e ignorada completamente). 3.1.2.2.- Comillas simples Encerrar caracteres en comillas simples (''') mantiene el valor literal de cualquier carácter situado entre las comillas. Una comilla simple no puede aparecer encerrada entre comillas simples, incluso cuando es precedida por una barra invertida. 3.1.2.3.- Comillas Dobles Encerrar caracteres entre comillas dobles ('”') mantiene el valor literal de todos los caracteres dentro de las comillas, con la excepción de '$', ''', '' y, cuando la expansión de la historia está habilitada, '!'. Los caracteres '$' y ''' mantienen su significado especial dentro de comillas dobles (Vea la Sección 3.5 [Expansiones de Shell]). La barra invertida mantiene su significado especial sólo cuando es seguida por uno de los siguientes caracteres: '$', ''', '', o nueva linea. Dentro de comillas dobles, las barras invertidas que son seguidas por uno de estos caracteres son eliminadas. Las barras invertidas que preceden caracteres sin un significado especial permanecen como tales. Una comilla doble puede ser entrecomillada dentro de dobles comillas precediéndola con una barra invertida. Si está habilitada la expansión de la historia de comandos esta se realizará a menos que el signo '!' que aparece entre las comillas dobles sea escapado usando una barra invertida. La barra invertida precediendo al '!' no es eliminada. Los parámetros especiales ' * ' y ' @ ' tienen un significado especial cuando aparecen encerrados entre comillas dobles (vea la sección 3.5.3 [Expansión de parámetros de la Shell]). 3.1.2.4.- Entrecomillado ANSI-C Las palabras de la forma $'cadena' son tratadas de forma especial. La palabra se expande a cadena, con los caracteres escapados por barras invertidas reemplazados como se especifica por el estándar ANSI C. Las secuencias de escape con barra invertida, si están presentes, son decodificadas como Página 14
Capitulo 3: Características Básicas del Shell interactive_comments activada no permite comentarios. La opción interactive_coments está establecida por defecto en las shells interactivas. Vea la sección 6.3 [Shells Interactiva], para una descripción de qué hace una shell interactiva. 3.2.- Comandos de Shell Un comando de shell simple como echo a b c consiste en el propio comando seguido por argu- mentos separados por espacios. Comandos de shell más complejos están compuestos de comandos simples situados juntos de varias formas; en una tubería en la cual la salida de un comando se convierte en la entrada del segundo, en una construcción tipo bucle o condicional, o en algunas otras agrupaciones.
Un comando simple es el tipo de comando que se encuentra con más frecuencia. Este es sólo una secuencia de palabras separadas por blancos, terminada por uno de los operadores de control de la shell (vea el Capítulo 2 [Definiciones]). La primera palabra generalmente especifica un comando para ser ejecutado, con el resto de las palabras como argumentos del comando. El estado de retorno (vea la Sección 3.7.5 [Estado de salida]) de un comando simple es su estado de salida como viene especificado por la función POSIX 1003.1 waitpid , o 128+n si el comando fue terminado por la señal n.
Una tubería es una secuencia de comandos simples separados por uno de los operadores de control '|' o '|&'. El formato de uso de una tubería es: [time [-p]] [!] comando1 [ [| o |&] comando2 … ] La salida de cada comando en la tubería es conectado a través del cauce a la entrada del siguiente comando. Esto es, cada comando lee la salida del comando previo. Esta conexión se establece antes de realizar cualquier redirección especificada por el comando. Si se usa '|&' la salida de error estándar del comando1 es conectada a la entrada estándar del comando2 a través del cauce; es una forma corta para 2>&1. Esta redirección implícita de la salida de error estándar se realiza después de cualquier redirección especificada en el comando. La palabra reservada time produce que se impriman estadísticas de tiempo para la tubería una vez que esta finaliza. Las estadísticas actualmente consisten en el tiempo transcurrido y tiempo de usuario y de sistema consumidos por la ejecución del comando. La opción '-p' cambia el formato de salida por el especificado por POSIX. La variable TIMEFORMAT puede ser ajustada a una cadena de formato que especifique como se debe mostrar la información de los tiempos. Vea la Sección 5. [Variables de Bash] para obtener una descripción de los formatos disponibles. El uso de time como palabra reservada permite el cronometrado de los comandos internos de la shell, las funciones de shell y las tuberías. Un comando externo time no podría hacer esto fácilmente. Si la tubería no se ejecuta de forma asíncrona (vea la Sección 3.2.3 [Listas]) la shell espera hasta que se completen todos los comandos de la tubería. Cada comando en una tubería se ejecuta en su propia subshell (vea la Sección 3.7.3 [Entorno de Ejecución de Comandos]). El estado de salida de una tubería es el estado de salida de el último Página 16
Capitulo 3: Características Básicas del Shell comando en la tubería, a menos que la opción pipefail esté activada (vea la Sección 4.3.1 [El Comando Interno Set]) Si pipefail está activado, el estado de retorno de la tubería es el valor del último comando (el más a la derecha) en salir con un estado distinto de cero, o cero si todos los comandos salen satisfactoriamente. Si la palabra reservada '!' precede a la tubería, el estado de salida es la negación lógica del estado de salida como se describió más arriba. El shell espera hasta que todos los comandos en la tubería terminen antes de retornar un valor.
Una lista es una secuencia de una o más tuberías separadas por uno de los siguientes operadores: ';', '&', '&&', o '||', y opcionalmente terminada por uno de los siguientes: ';', '&', o una nueva línea. De estos operadores de lista '&&' y '||' tienen igual precedencia, seguidos por ';' y '&', que tienen igual precedencia. Una secuencia de una o más nuevas líneas pueden aparecer en una lista para delimitar comandos, esto equivale a un punto y coma. Si un comando termina con el operador de control '&' la shell ejecuta el comando de forma asíncrona en una subshell. Esto es conocido como ejecutar el comando en segundo plano. La shell no espera a que el comando finalice, y el estado de retorno es 0 (verdadero). Cuando el control de tareas no está activado (vea el Capítulo 7 [Control de Tareas]), la entrada estándar para los comandos asíncronos, en ausencia de alguna redirección explícita, es redirigida desde /dev/null. Los comandos separados por un ';' se ejecutan secuencialmente; la shell espera para que cada comando finalice turnándose con el siguiente. El estado de retorno es el estado de retorno del último comando ejecutado. Las listas Y (AND) y O (OR) son secuencias de una o más tuberías separadas por los opera- dores de control '&&' y '||' respectivamente. Las listas AND y OR son ejecutadas con asociatividad a la izquierda Una lista AND tiene la forma comando1 && comando comando2 se ejecuta sí y sólo sí el comando1 retorna un estado de salida de cero. Una lista OR tiene la forma comando1 || comando comando2 se ejecuta sí y sólo sí, el comando1 retorna un valor de salida distinto de cero. El estado de retorno de las listas AND y OR es el estado de salida del último comando ejecutado en la lista.
Los comandos compuestos son las construcciones de programación de la shell. Cada construcción comienza con una palabra reservada o un operador de control y termina con otra correspondiente palabra reservada u operador. Cualquier redirección (vea la Sección 3.6 [Redirecciones]) asociada con un comando compuesto se aplica a todos los comandos dentro de ese comando compuesto, a menos que sea sobreescrito explícitamente. Bash proporciona construcciones cíclicas, comandos condicionales y mecanismos para agrupar comandos y ejecutarlos como una unidad. Página 17
Capitulo 3: Características Básicas del Shell if comandos-test; then comandos-consiguientes [elif mas-comandos-test; then más-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 construcción ' else alternativas-consiguientes' está presente y el comando final en la última clausula if o elif tiene un estado de salida distinto de cero, entonces se ejecutan las alternativas-consiguientes. El estado de retorno es el estado de salida del último comando ejecutado o cero si ninguna condición fue evaluada como true. case La sintaxis del comando case es: case palabra in [ [(] patrón [| patrón] ….) lista- comandos ;;]... esac case ejecutará selectivamente la lista-comandos correspondiente al primer patrón que se ajusta con palabra. Si la opción de shell nocasematch (vea la descripción de shopt en la Sección 4.3.2 [El Comando Interno Shopt]) está activada, el ajuste se realiza sin diferenciar entre mayúsculas y minúsculas para los caracteres alfabéticos. El '|' se usa para separar patrones múltiples, y el operador ')' termina una lista de patrones. Una lista de patrones y su lista de comandos asociada se conoce como una clausula. Cada clausula debe terminar con ';;', ';&' o ';;&'. La palabra sufre expansión de tildes, expansión de parámetros, sustitución de comandos, expansión aritmética y eliminación de entrecomillado antes de intentar el ajuste. Cada patrón sufre expansión del tildes, expansión de parámetros, sustitución de comandos y expansión aritmética. Puede haber un número arbitrario de clausulas case , cada una terminada con un ';;', ';&' o ';;&'. El primer patrón que ajusta determina la lista-comandos que será ejecutada. Aquí hay un ejemplo usando case en un guión que se puede utilizar para describir una interesante característica de un animal: echo -n "Introduzca el nombre de un animal: " read ANIMAL echo -n "El $ANIMAL tiene " case $ANIMAL in caballo | perro | gato) echo -n "cuatro";; hombre | canguro ) echo -n "dos";; *) echo -n "un número desconocido de";; esac echo " patas." Si se utiliza el operador ';;' no se intenta ningún ajuste adicional tras el primer patrón encontrado. Usar ';&' en vez de ';;' produce que la ejecución continúe con la lista- comandos asociada con la siguiente clausula, si hay alguna. Usar ';;&' en vez de Página 19
Capitulo 3: Características Básicas 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 ningún patrón. De otro modo, el estado de retorno es la salida del estado de la lista-comandos ejecutada. select La construcción select permite generar menús fácilmente. Esta tiene casi la misma sintaxis que el comando for : select nombre [ in palabras …]; do comandos; done Se expande la lista de palabras que siguen a in , generando una lista de items. El juego de palabras expandidas se imprime en el flujo de la salida de error estándar, cada una precedida por un número. Si se omite la construcción 'in palabras' se imprimen los parámetros posicionales, como si se hubiese especificado 'in “$@”'. A continuación se muestra el prompt PS3 y se lee una línea desde la entrada estándar. Si la linea consiste en un número correspondiente a una de las palabras mostradas, entonces el valor de nombre es ajustado a esa palabra. Si la linea está vacía, las palabras y el prompt se muestran de nuevo. Si se lee EOF (fin de fichero), el comando select finaliza. Cualquier otro valor leído produce que nombre se establezca a null. La linea leída es salvada en la variable REPLY. Los comandos son ejecutados después de cada selección hasta que se ejecuta un comando break , punto en el que el comando select finaliza. A continuación tenemos un ejemplo que permite al usuario elegir un nombre de fichero del directorio actual y mostrar el nombre y el índice del archivo seleccionado: select fname in *; do echo usted seleccionó $fname ($REPLY) break; done (( … )) (( expresión )) La expresión aritmética se evalúa de acuerdo a las reglas descritas más abajo (vea la sección 6.5 [Aritmética del Shell]). Si el valor de la expresión es distinta de cero, el estado de retorno es 0; de otro modo el estado de retorno es 1. Esto es exactamente equivalente a let “expresión” Vea la Sección 4.2 [Comandos Internos de Bash] para una descripción completa del comando interno let. [[ … ]] [[ expresión ]] Devuelve un estado de 0 ó 1 dependiendo de la evaluación de la expresión condicional expresión. Las expresiones se componen de expresiones fundamentales descritas más abajo en la Sección 6.4 [Expresiones Condicionales de Bash]. La división de palabras y la expansión de nombres de archivo no se realiza en las palabras encerradas entre '[[' y Página 20