Provided by:
manpages-es-extra_0.8a-17_all 
NOMBRE
bash - GNU Bourne-Again SHell (el Shell de Bourne otra vez, de GNU)
SINOPSIS
bash [opciones] [fichero]
DERECHOS DE COPIA
Bash es Copyright © 1989, 1991, 1993, 1995, 1996 por la Free Software
Foundation, Inc.
DESCRIPCIÓN
Bash es un intérprete de un lenguaje de órdenes compatible con sh que
ejecuta órdenes leídas desde la entrada estándar o desde un fichero.
Bash también incorpora características útiles tomadas de los shells de
Korn y C (ksh y csh).
Bash está pensado con la intención de ser una implementación conforme
con la especificación POSIX de Shell y Herramientas, de la IEEE (Grupo
de Trabajo 1003.2 de la IEEE).
OPCIONES
Además de las opciones de un solo carácter documentadas en la
descripción de la orden interna set, bash interpreta las siguientes
opciones cuando es llamado:
-c cadena Si la opción -c está presente, entonces las órdenes se leen
de cadena. Si hay argumentos tras la cadena, se asignan a
los parámetros posicionales, empezando por $0.
-r Si la opción -r está presente, entonces el shell se vuelve
restringido (vea SHELL RESTRINGIDO más abajo).
-i Si la opción -i está presente, el shell es interactivo.
-s Si la opción -s está presente, o si no quedan argumentos tras
el procesado de las opciones, entonces las órdenes se leen
desde la entrada estándar. Esta opción permite definir los
parámetros posicionales cuando se llama a un shell
interactivo.
-D Se muestra en la salida estándar una lista de cadenas de
caracteres entrecomilladas precedidas por $. Estas cadenas
son las que están sujetas a traducción cuando la localización
en curso no es C ni POSIX. Esta opción implica también la
-n; no se ejecuta ninguna orden.
-- Un -- señala el fin de las opciones e inhabilita cualquier
posterior procesado de opciones. Cualesquier argumentos tras
-- se tratan como nombres de fichero y argumentos. Un
argumento - es equivalente a --.
Bash también interpreta una variedad de opciones multi-carácter. Estas
opciones deben aparecer en la línea de órdenes antes de las opciones de
un solo carácter para que puedan ser reconocidas.
--dump-po-strings
Equivalente a -D, pero la salida es en el formato de un fichero
po (objeto portable), del gettext de GNU.
--dump-strings
Equivalente a -D.
--help Muestra un mensaje de modo de empleo en la salida estándar y
acaba con éxito.
--login
Hace que bash actúe como si se le hubiera llamado como un shell
de entrada (vea LLAMADA más abajo).
--noediting
No utiliza la biblioteca de GNU readline para leer líneas de
órdenes en interactivo.
--noprofile
No lee ni el fichero de arranque de sistema /etc/profile ni
ninguno de los ficheros de inicio personales ~/.bash_profile,
~/.bash_login, ni ~/.profile. Por omisión, bash lee estos
ficheros cuando se le llama como un shell de entrada (vea
LLAMADA más adelante).
--norc No lee ni ejecuta el fichero de inicio personal ~/.bashrc si el
shell es interactivo. Esta opción está activa de forma
predeterminada si el shell se llama como sh.
--posix
Cambia el comportamiento de bash donde la operación normal
difiera del estándar POSIX 1003.2, de forma que concuerde con
éste.
--rcfile fichero
Ejecuta órdenes desde fichero en vez de desde el fichero de
inicio personal estándar ~/.bashrc si el shell es interactivo
(vea LLAMADA más abajo).
--restricted
El shell se vuelve restringido (vea SHELL RESTRINGIDO más
abajo).
--verbose
Equivale a -v.
--version
Muestra información en la salida estándar sobre la versión de
esta instanciación de bash y acaba con éxito.
ARGUMENTOS
Si quedan argumentos tras el procesado de las opciones, y no se han
dado ni la opción -c ni la -s, se supone que el primer argumento es el
nombre de un fichero que contiene órdenes del shell. Si bash se llama
de esta manera, $0 se define con el nombre del fichero, y los
parámetros posicionales se definen con los restantes argumentos. Bash
lee y ejecuta órdenes de este fichero, luego acaba. El estado de
salida de bash es el de la última orden ejecutada en el guión. Si no
se ejecuta ninguna orden, el estado de salida es 0.
LLAMADA
Un shell de entrada es aquél cuyo primer carácter del argumento cero es
un -, o uno que ha sido llamado con la opción --login.
Un shell interactivo es uno cuya entrada y salida estándares están
conectadas a terminales (según determina isatty(3)), o uno que ha sido
llamado con la opción -i. Se define PS1 y $- incluye i si bash es
interactivo, permitiendo así a un guión del shell o a un fichero de
arranque el comprobar este estado.
Los siguientes párrafos describen cómo bash ejecuta sus ficheros de
arranque. Si cualquiera de los ficheros existe pero no puede leerse,
bash informa de un error. Las tildes de la ñ se expanden en nombres de
ficheros como se describe más abajo en Expansión de la tilde en la
sección EXPANSIÓN.
Cuando bash se llama como un shell de entrada interactivo, primero lee
y ejecuta órdenes desde el fichero /etc/profile, si es que existe.
Tras leer ese fichero, busca ~/.bash_profile, ~/.bash_login, y
~/.profile, en ese orden, y lee y ejecuta órdenes del primero de ellos
que exista y se pueda leer. La opción --noprofile puede emplearse
cuando se llame al shell para inhibir este comportamiento.
Cuando un shell de entrada termina, bash lee y ejecuta órdenes desde el
fichero ~/.bash_logout, si existe.
Cuando se arranca un shell interactivo que no es de entrada, bash lee y
ejecuta órdenes desde ~/.bashrc, si es que existe. Esto puede evitarse
mediante la opción --norc. La opción --rcfile fichero forzará a bash a
leer y ejecutar órdenes desde fichero en vez de ~/.bashrc.
Cuando bash se arranque de forma no interactiva, por ejemplo para
ejecutar un guión del shell, busca la variable BASH_ENV en el entorno,
expande su valor si está definida, y utiliza el valor expandido como el
nombre de un fichero a leer y ejecutar. Bash se comporta como si se
ejecutaran las siguientes órdenes:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
pero el valor de la variable PATH no se emplea para buscar el nombre
del fichero.
Si bash se llama con el nombre sh, intenta imitar el comportamiento de
arranque de versiones históricas de sh tanto como sea posible, pero sin
salirse del estándar POSIX. Cuando se llama como un shell interactivo
de entrada, primero intenta leer y ejecutar órdenes desde /etc/profile
y ~/.profile, en ese orden. La opción --noprofile puede emplearse para
inhibir este comportamiento. Cuando se llama como un shell interactivo
con el nombre sh, bash busca la variable ENV, expande su valor si está
definida, y emplea el valor expandido como el nombre de un fichero a
leer y ejecutar. Como un shell llamado como sh no intenta leer y
ejecutar órdenes desde cualquier otro fichero de arranque, la opción
--rcfile no tiene efecto. Un shell no interactivo llamado con el
nombre sh no intenta leer ningún fichero de arranque. Cuando se llama
como sh, bash entra en modo posix después de leer los ficheros de
arranque.
Cuando bash se arranca en modo posix, como ocurre cuando se da la
opción de línea de órdenes --posix, sigue el estándar POSIX para los
ficheros de arranque. En este modo, los shells interactivos expanden
la variable ENV y se leen y ejecutan órdenes desde el fichero cuyo
nombre es el valor expandido de dicha variable. No se lee ningún otro
fichero de arranque.
Bash intenta determinar cuándo está siendo llamado por el demonio de
shell remoto, usualmente rshd. Si bash determina que está siendo
ejecutado por rshd, lee y ejecuta órdenes desde ~/.bashrc, si tal
fichero existe y se puede leer. Esto no lo hará si se le llama con el
nombre sh. La opción --norc puede emplearse para inhibir este
comportamiento, y la opción --rcfile puede utilizarse para forzar la
lectura de otro fichero, pero rshd no llama generalmente al shell con
estas opciones ni permite que se den.
DEFINICIONES
Las siguientes definiciones se usan a través del resto de este
documento.
blanco Un espacio en blanco o tabulación (tab).
palabra
Una secuencia de caracteres considerados por el shell como una
sola unidad. También se conoce como un lexema (token).
nombre Una palabra que consiste solamente en caracteres alfanuméricos y
subrayados, y comienza con un carácter alfabético o un
subrayado. También se llama identificador.
metacarácter
Un carácter que, cuando no está entrecomillado, separa palabras.
Uno de los siguientes:
| & ; ( ) < > espacio tab
operador de control
Un lexema que realiza una función de control. Es uno de los
siguientes símbolos:
|| & && ; ;; ( ) | <nueva-línea>
PALABRAS RESERVADAS
Palabras reservadas son palabras que tienen un significado especial
para el shell. Las siguientes palabras se reconocen como reservadas
cuando no van entrecomilladas y, o son la primera palabra de una orden
simple (vea GRAMÁTICA DEL SHELL más abajo) o la tercera palabra de una
orden case o for:
! case do done elif else esac fi for function if in select then until
while { } time [[ ]]
GRAMÁTICA DEL SHELL
Órdenes simples
Una orden simple es una secuencia de asignaciones opcionales de
variables seguida por palabras separadas por blancos y redirecciones, y
terminadas por un operador de control. La primera palabra especifica la
orden a ser ejecutada. Las palabras restantes se pasan como argumentos
a la orden pedida.
El valor devuelto de una orden simple es su estado de salida, ó 128+n
si la orden ha terminado debido a la señal n.
Tuberías
Una tubera es una secuencia de una o más órdenes separadas por el
carácter |. El formato de una tubería es:
[time [-p]] [ ! ] orden [ | orden2 ... ]
La salida estándar de orden se conecta a la entrada estándar de orden2.
Esta conexión se realiza antes que cualquier redirección especificada
por la orden (vea REDIRECCIÓN más abajo).
Si la palabra reservada ! precede una tubería, el estado de salida de
ésta es el NO lógico del de la última orden. De otro modo, el estado de
la tubería es el de salida de la última orden. El shell espera que
todas las órdenes de la tubería terminen antes de devolver un valor.
Si la palabra reservada time precede una tubería, se informa del tiempo
transcurrido, así como del de usuario y sistema, consumido en la
ejecución de la tubería, cuando ésta termina. La opción -p cambia el
formato de salida al especificado por POSIX. La variable TIMEFORMAT
puede definirse como una cadena de caracteres de formato que
especifique cómo la información de tiempos debería mostrarse; vea la
descripción de TIMEFORMAT bajo Variables del Shell más abajo.
Cada orden en una tubería se ejecuta como un proceso separado (esto es,
en un subshell).
Listas
Una lista es una secuencia de una o más tuberías separadas por uno de
los operadores ;, &, &&, o ⎪⎪, y terminada opcionalmente por uno de ;,
&, o <nueva-línea>.
De estos operadores de listas, && y ⎪⎪ tienen igual precedencia,
seguidos por ; y &, que tienen igual precedencia.
Si una orden se termina mediante el operador de control &, el shell
ejecuta la orden en segundo plano en un subshell. El shell no espera
que la orden acabe, y el estado devuelto es 0. Las órdenes separadas
por un ; se ejecutan secuencialmente; el shell espera que cada orden
termine, por orden. El estado devuelto es el estado de salida de la
última orden ejecutada.
Los operadores de control && y ⎪⎪ denotan listas Y (AND) y O (OR)
respectivamente. Una lista Y tiene la forma
orden && orden2
orden2 se ejecuta si y sólo si orden devuelve un estado de salida 0.
Una lista O tiene la forma
orden ⎪⎪ orden2
orden2 se ejecuta si y sólo si orden devuelve un estado de salida
distinto de cero. El estado de salida de las listas Y y O es el de la
última orden ejecutada en la lista.
Órdenes compuestas
Una orden compuesta es una de las siguientes:
(lista)
lista se ejecuta en un subshell. Después de que la orden se
completa, las asignaciones a variables y órdenes internas que
afectaran al entorno del shell no permanecen en efecto. El
estado de retorno es el de salida de lista.
{ lista; }
lista se ejecuta simplemente en el entorno del shell en curso.
lista debe terminarse con un salto de línea o un punto y coma.
Esto se conoce como una orden de grupo. El estado de retorno es
el de salida de lista.
((expresin))
La expresin se evalúa de acuerdo a las reglas descritas abajo
bajo la sección EVALUACIÓN ARITMÉTICA. Si el valor de la
expresión es distinto de cero, el estado de retorno es 0; de
otro modo el estado de retorno es 1. Esto es equivalente
exactamente a let "expresin".
[[ expresin ]]
Devuelve un estado de 0 ó 1 dependiendo de la evaluación de la
expresión condicional expresin. Las expresiones se componen de
las primarias descritas adelante bajo EXPRESIONES CONDICIONALES.
No tienen lugar división de palabras ni expansión de nombres de
camino en las palabras entre el [[ y el ]]; sí se realizan la
expansión de tilde, expansión de parámetros y variables,
expansión aritmética, sustitución de orden, sustitución de
proceso y eliminación de comillas.
Cuando se emplean los operadores == y !=, la cadena a la derecha
del operador se considera un patrón y se hace concordar de
acuerdo a las reglas descritas más adelante bajo el epígrafe
Concordancia de patrones. El valor devuelto es 0 si la cadena
concuerda o no concuerda con el patrón, respectivamente, y 1 en
otro caso. Cualquier parte del patrón puede entrecomillarse
para forzar la concordancia como una cadena de caracteres pura.
Las expresiones pueden combinarse mediante los siguientes
operadores, listados en orden decreciente de precedencia:
( expresin )
Devuelve el valor de expresin. Esto puede emplearse
para cambiar la precedencia normal de los operadores.
! expresin
Verdad si expresin es falsa.
expresin1 && expresin2
Verdad si ambas expresin1 y expresin2 son verdaderas.
expresin1 || expresin2
Verdad si una al menos de expresin1 o expresin2 es
verdad.
Los operadores && y || no ejecutan expresin2 si el valor de expresin1
es suficiente para determinar el valor de retorno de la expresión
condicional entera.
for nombre [ in palabra; ] do lista ; done
La lista de palabras que va detrás de in se expande, generando
una lista de elementos. La variable nombre se define como cada
elemento de la lista en cada iteración, y lista se ejecuta cada
vez. Si la palabra de in se omite, la orden for ejecuta lista
una vez para cada parámetro posicional que esté definido (vea
PARÁMETROS más abajo). El estado de retorno es el de salida de
la última orden que se ejecuta. Si la expansión de los
elementos después del in resulta en una lista vacía, no se
ejecuta ninguna orden y el estado de salida es 0.
select nombre [ in palabra; ] do lista ; done
La lista de palabras que sigue a in se expande, generando una
lista de elementos. El conjunto de palabras expandidas se
muestra en la salida estándar de errores, cada una precedida por
un número. Si la palabra del in se omite, se muestran los
parámetros posicionales (vea PARÁMETROS más abajo). Entonces se
muestra el indicador PS3 y se lee una línea desde la entrada
estándar. Si la línea consiste en un número correspondiente a
una de las palabras mostradas, entonces el valor de nombre se
pone a esa palabra. Si la línea está vacía, las palabras y el
indicador se muestran de nuevo. Si se lee EOF, la orden se
completa. Cualquier otro valor leída hace que nombre se ponga a
un valor vacío. La línea leída se guarda en la variable REPLY.
La lista se ejecuta tras cada selección hasta que se ejecute una
orden break o return. El estado de salida de select es el de la
última orden ejecutada en lista, o cero si no se ha ejecutado
ninguna orden.
case palabra in [ ( patrn [ | patrn ] ... ) lista ;; ] ... esac
Una orden case expande primero palabra, e intenta hacerla
concordar contra cada patrn por turnos, empleando las mismas
reglas de concordancia que para la expansión de nombres de
caminos (vea Expansión de nombre de camino más abajo). Cuando
se encuentre una concordancia, se ejecuta la lista
correspondiente. Tras la primera concordancia, no se intentan
más. El estado de salida es cero si no concuerda ningún patrón.
De otro modo, es el estado de salida de la última orden
ejecutada en lista.
if lista; then lista; [ elif lista; then lista; ] ... [ else lista; ]
fi
La lista if se ejecuta. Si su estado de salida es cero, se
ejecuta la lista then. De otro modo, se ejecuta por turno cada
lista elif, y si su estado de salida es cero, se ejecuta la
lista then correspondiente y la orden se completa. Si no, se
ejecuta la lista then si está presente. El estado de salida es
el de la última orden ejecutada, o cero si ninguna condición fue
verdadera.
while lista; do lista; done
until lista; do lista; done
La orden while ejecuta continuamente la lista do siempre que la
última orden de lista devuelva un estado de salida cero. La
orden until es idéntica a la while, excepto en que la
comprobación es al revés; la lista do se ejecuta mientras que la
última orden en lista devuelva un estado de salida distinto de
cero. El estado de salida de las órdenes while y until es el de
la última orden de la lista do ejecutada, o cero si no se
ejecutó ninguna orden.
[ function ] nombre () { lista; }
Esto define una función llamada nombre. El cuerpo de la función
es la lista de órdenes entre { y } . Esta lista se ejecuta cada
vez que se especifica nombre como el nombre de una orden simple.
El estado de salida de una función es el de la última orden
ejecutada en el cuerpo. (Vea FUNCIONES más abajo.)
COMENTARIOS
En un shell no interactivo, o en uno interactivo en el que la opción
interactive_comments de la orden interna shopt está activa (vea ÓRDENES
INCORPORADAS DEL SHELL más abajo), una palabra que empiece por # hace
que esa palabra y todos los caracteres que queden en esa línea no sean
tenidos en cuenta. Un shell interactivo sin la opción
interactive_comments habilitada, no admite comentarios. La opción
interactive_comments está activa de forma predeterminada en shells
interactivos.
ENTRECOMILLADO
El entrecomillado se emplea para quitar el significado especial para el
shell de ciertos metacaracteres o palabras. Puede emplearse para que no
se traten caracteres especiales de forma especial, para que palabras
reservadas no sean reconocidas como tales, y para evitar la expansión
de parámetros.
Cada uno de los metacaracteres listados a continuación bajo el epígrafe
DEFINICIONES tiene un significado especial para el shell y deben ser
protegidos o entrecomillados si quieren representarse a sí mismos. Hay
3 mecanismos de protección: el carcter de escape, comillas simples, y
comillas dobles.
Una barra inclinada inversa no entrecomillada (\) es el carcter de
escape. Preserva el valor literal del siguiente carácter que lo
acompaña, con la excepción de <nueva-línea>. Si aparece un par
\<nueva-línea> y la barra invertida no está ella misma entre comillas,
el \<nueva-línea> se trata como una continuación de linea (esto es, se
quita del flujo de entrada y no se tiene efectivamente en cuenta).
Encerrar caracteres entre apóstrofos preserva el valor literal de cada
carácter entre las comillas. Una comilla simple no puede estar entre
comillas simples, ni siquiera precedida de una barra invertida.
Encerrar caracteres entre comillas dobles preserva el valor literal de
todos los caracteres de dentro de las comillas, con la excepción de $,
`, y \. Los caracteres $ y ` mantienen sus significados especiales
dentro de comillas dobles. La barra invertida mantiene su significado
especial solamente cuando está seguida por uno de los siguientes
caracteres: $, `, "", \, o <nueva-línea>. Una comilla doble puede ser
entrecomillada entre otras comillas dobles precediéndola de una barra
invertida.
Los parámetros especiales * y @ tienen un significado especial cuando
están entre comillas dobles (vea PARÁMETROS más abajo).
Las palabras de la forma $'cadena' se tratan de forma especial. La
palabra se expanda a cadena, con los caracteres protegidos par barra
invertida reemplazados según especifica el estándar ANSI/ISO de C. Las
secuencias de escape con barra invertida, si están presentes, se
descodifican como sigue:
\a alerta (campana)
\b espacio-atrás
\e un carácter de escape (ESC)
\f nueva página
\n nueva linea
\r retorno de carro
\t tabulación horizontal
\v tabulación vertical
\\ barra invertida
\nnn el carácter cuyo código es el valor octal nnn (de uno a
tres dígitos)
\xnnn el carácter cuyo código es el valor hexadecimal nnn
El resultado traducido es entrecomillado con comillas simples, como si
el signo de dólar no hubiera estado presente.
Una cadena entre comillas dobles precedida por un signo de dólar ($)
hará que la cadena se traduzca según la localización en curso. Si ésta
es C o POSIX, el signo de dólar no se tiene en cuenta. Si la cadena se
traduce y reemplaza, el reemplazo se entrecomilla con comillas dobles.
PARÁMETROS
Un parmetro es una entidad que almacena valores. Puede ser un nombre,
un número, o uno de los caracteres especiales listados a continuación
bajo el epígrafe Parámetros especiales. En lo que se refiere al shell,
una variable es un parámetro identificado por un nombre.
Un parámetro está definido si se le ha asignado un valor. La cadena
vacía es un valor válido. Una vez que una variable está definida, sólo
puede quitarse de la lista de variables mediante la orden interna unset
(vea ÓRDENES INTERNAS DEL SHELL más adelante).
A una variable se le puede asignar un valor mediante una sentencia de
la forma
nombre=[valor]
Si no se da el valor, a la variable se asigna la cadena vacía. Todos
los valores están sujetos a expansión de tilde, de parámetros y
variables, de cadena, de orden, aritmética, y eliminación de comillas
(vea EXPANSIÓN más abajo). Si la variable tiene activado su atributo
integer (vea declare más abajo en ÓRDENES INTERNAS DEL SHELL) entonces
valor está sujeto a expansión aritmética incluso si no se emplea la
expansión $((...)) (vea Expansión aritmética más adelante). No se
realiza la división de palabras, con la excepción de "$@" como se
explica más adelante bajo el epígrafe Parámetros especiales. La
expansión de nombres de camino no se efectúa.
Parámetros posicionales
Un parmetro posicional es un parámetro denotado por uno o más dígitos,
distintos del simple 0. Los parámetros posicionales se asignan a partir
de los argumentos del shell cuando éste es llamado, y pueden ser
reasignados mediante la orden interna set. Los parámetros posicionales
no pueden ser asignados con sentencias de asignación. Los parámetros
posicionales se reemplazan temporalmente cuando se ejecuta una función
del shell (vea FUNCIONES abajo).
Cuando un parámetro posicional consistente en más de un solo dígito se
expande, debe rodearse por llaves (vea EXPANSIÓN abajo).
Parámetros especiales
El shell trata de forma especial a ciertos parámetros. Éstos sólo
pueden referenciarse; no se permite asignarles nada.
* Se expande a los parámetros posicionales, empezando por 1.
Cuando la expansión ocurre entre comillas dobles, se expande a
una sola palabra con el valor de cada parámetro separado por el
primer carácter de la variable especial IFS. Esto es, "$*" es
equivalente a "$1c$2c...", donde c es el primer carácter del
valor de la variable IFS. Si IFS no está definida, los
parámetros se separan por espacios. Si IFS es la cadena vacía,
los parámetros se juntan sin ningún separador.
@ Se expande a los parámetros posicionales, empezando desde 1.
Cuando la expansión ocurre dentro de comillas dobles, cada
parámetro se expande a una palabra separada. Esto es, "$@" es
equivalente a "$1" "$2" ... Cuando no hay parámetros
posicionales, "$@" y $@ se expanden a nada (esto es, se borran).
# Se expande al número en base 10 de parámetros posicionales.
? Se expande al estado de la tubería más recientemente ejecutada
en primer plano.
- Se expande a las opciones del shell activas actualmente según se
hayan especificado en la llamada, mediante la orden interna set,
o las que haya puesto el mismo shell (como la opción -i).
$ Se expande al PID del shell. En un subshell (), se expande al
PID del shell actual, no al del subshell.
! Se expande al PID de la orden más recientemente ejecutada en
segundo plano (asíncronamente).
0 Se expande al nombre del shell o guión del shell. Este parámetro
se pone en el inicio del shell. Si bash se llama con un fichero
de órdenes, $0 se pone al nombre de ese fichero. Si bash se
arranca con la opción -c, entonces $0 se pone al primer
argumento tras la cadena que se va a ejecutar, si hay alguno
presente. Si no, se pone al nombre de fichero empleado para
llamar a bash, como se da en el argumento cero.
_ En el arranque del shell, se pone al nombre absoluto de fichero
del shell o guión del shell que se está ejecutando, tal como se
ha pasado en la lista de argumentos. Subsecuentemente, se
expande al último argumento de la orden anterior, tras la
expansión. También se pone al nombre completo del fichero de
cada orden ejecutada, y se pone en el entorno exportado a esa
orden. Cuando se está comprobando si hay correo nuevo, este
parámetro contiene el nombre del fichero de correo o buzón que
se está comprobando actualmente.
Variables del shell
El shell pone automáticamente las siguientes variables:
PPID El PID del proceso padre del shell. Esta variable es de lectura
exclusiva.
PWD El directorio de trabajo actual como lo pone la orden cd.
OLDPWD El directorio de trabajo anterior como lo puso la orden cd.
REPLY La línea de entrada leída por la orden interna read cuando no se
le dan argumentos.
UID Se expande al UID del usuario en curso, puesta en el arranque
del shell. Esta variable es de lectura exclusiva.
EUID Se expande al UID efectivo del usuario en curso, puesta en el
arranque del shell. Esta variable es de lectura exclusiva.
GROUPS Una variable vector conteniendo la lista de grupos de los que el
usuario actual es miembro. Esta variable es de lectura
exclusiva.
BASH Se expande al nombre completo del fichero empleado para llamar a
esta instancia de bash.
BASH_VERSION
Se expande a una cadena que describe la versión de esta
instancia de bash.
BASH_VERSINFO
Una variable vector de lectura exclusiva cuyos miembros
contienen información de versión para esta instancia de bash.
Los valores asignados a los miembros del vector son como sigue:
BASH_VERSINFO[0] El número mayor de versión (la
distribucin).
BASH_VERSINFO[1] El número menor de versión (la versin).
BASH_VERSINFO[2] El nivel de parcheo.
BASH_VERSINFO[3] La versión de construcción.
BASH_VERSINFO[4] El estado de la distribución (por
ejemplo, beta1).
BASH_VERSINFO[5] El valor de MACHTYPE.
SHLVL Se incrementa en uno cada vez que se arranca una nueva instancia
de bash.
RANDOM Cada vez que este parámetro sea referenciado, se genera un
entero aleatorio entre 0 y 32767. La secuencia de números
aleatorios puede iniciarse asignando un valor a RANDOM. Si
RANDOM no está definido, pierde sus propiedades especiales,
incluso si posteriormente es redefinido.
SECONDS
Cada vez que este parámetro es referenciado, se devuelve en él
el número de segundos transcurridos desde la llamada al shell.
Si se asigna un valor a SECONDS, el valor devuelto en
posteriores referencias es el número de segundos desde la
asignación más el valor asignado. Si SECONDS no está definido,
pierde sus propiedades especiales, incluso si posteriormente es
redefinido.
LINENO Cada vez que este parámetro es referenciado, el shell sustituye
un número en base 10 representando el número de línea secuencial
actual (empezando por 1) dentro de un guión o función. Si no
estamos en un guión o función, no se garantiza que el valor
sustituido tenga significado. Si LINENO no está definido,
pierde sus propiedades especiales, incluso si posteriormente es
redefinido.
HISTCMD
El número de "historia", o índice en la lista "histórica", de la
orden actual. Si HISTCMD no está definido, pierde sus
propiedades especiales, incluso si posteriormente es redefinido.
DIRSTACK
Una variable vector (vea Vectores más abajo) que aloja los
contenidos actuales de la pila de directorios. Los directorios
aparecen en la pila en el orden en el que se muestran con la
orden interna dirs. La asignación a miembros de este vector
puede emplearse para modificar directorios que ya estén en la
pila, pero entonces deben utilizarse las órdenes internas pushd
y popd para añadir y quitar directorios. La asignación a esta
variable no cambiará el directorio de trabajo. Si DIRSTACK no
está definido, pierde sus propiedades especiales, incluso si
posteriormente es redefinido.
PIPESTATUS
Una variable vector (vea Vectores más abajo) que contiene una
lista de valores de estado de salida de los procesos en la
tubería en primer plano ejecutada más recientemente (que puede
contener una sola orden).
OPTARG El valor del último argumento que es una opción procesado por la
orden interna getopts (vea ÓRDENES INTERNAS DEL SHELL más
abajo).
OPTIND El índice del siguiente argumento a ser procesado por la orden
interna getopts (vea ÓRDENES INTERNAS DEL SHELL más abajo).
HOSTNAME
Puesto automáticamente al nombre del anfitrión (computador)
actual.
HOSTTYPE
Puesto automáticamente a una cadena que describe de forma
unívoca el tipo de máquina en la que bash se está ejecutando.
El valor predefinido depende del sistema.
OSTYPE Puesto automáticamente a una cadena que describe el sistema
operativo en el que bash se está ejecutando. El valor
predefinido depende del sistema. En Linux es "linux".
MACHTYPE
Puesto automáticamente a una cadena que describe completamente
el tipo de sistema en el que bash se está ejecutando, en el
formato estándar de GNU cpu-compaa-sistema. El valor
predefinido depende del sistema.
SHELLOPTS
Una lista, de elementos separados por dos puntos, de opciones
activas del shell. Cada palabra en la lista es un argumento
válido para la opción -o de la orden interna set (vea ÓRDENES
INTERNAS DEL SHELL abajo). Las opciones que aparecen en
SHELLOPTS son aquéllas que aparecen como on en set -o. Si esta
variable está en el ambiente cuando bash empieza, cada opción
del shell en la lista se activará antes de leer cualquier
fichero de inicio. Esta variable es de lectura exclusiva.
El shell hace uso de las siguientes variables. En algunos casos, bash
asigna un valor predeterminado a una variable; estos casos se dicen
abajo.
IFS El Separador Interno de Campo que se emplea para la división de
palabras tras la expansión y para dividir líneas en palabras con
la orden interna read. El valor predeterminado es
``<espacio><tab><nueva-línea>''.
PATH El camino de búsqueda para órdenes, programas ejecutables. Es
una lista de directorios separados por dos puntos en los cuales
el shell busca órdenes (vea EJECUCIÓN DE ÓRDENES más abajo). El
camino predeterminado depende del sistema, y lo pone el
administrador que instala bash. Un valor común es
``/usr/local/bin:/bin:/usr/bin:.''.
HOME El directorio inicial de trabajo del usuario en curso; el
argumento predeterminado para la orden interna cd. El valor de
esta variable se usa también cuando se realiza la expansión de
tilde.
CDPATH El camino de búsqueda para la orden cd. Es una lista de
directorios separados por dos puntos en los cuales el shell
busca directorios destino especificados por la orden cd. Un
valor de muestra es ``.:~:/usr''.
BASH_ENV
Si este parámetro está definido cuando bash está ejecutando un
guión del shell, su valor se interpreta como un nombre de
fichero que contiene órdenes para iniciar el shell, como en
~/.bashrc. El valor de BASH_ENV está sujeto a expansión de
parámetros, sustitución de órdenes y expansión aritmética, antes
de ser interpretado como un nombre de fichero. PATH no se usa
para buscar el nombre de fichero resultante.
MAIL Si este parámetro está puesto a un nombre de fichero y la
variable MAILPATH no está definida, bash informa al usuario de
la llegada de correo en el fichero especificado.
MAILCHECK
Especifica cuán a menudo (en segundos) bash comprueba si hay
correo nuevo. El valor predeterminado es 60 s. Cuando es tiempo
de comprobar si hay correo, el shell lo hace antes de mostrar el
indicador primario. Si esta variable no está definida, el shell
no comprueba si hay correo nuevo.
MAILPATH
Una lista de nombres de fichero separados por dos puntos donde
hay que comprobar si hay correo nuevo. El mensaje que haya que
mostrar cuando llegue correo a un fichero particular puede
especificarse separando el nombre de fichero del mensaje con un
'?'. Cuando se use en el texto del mensaje, $_ se expande al
nombre del fichero de correo en curso. Ejemplo:
MAILPATH='/var/spool/mail/bfox?"Tienes carta":~/shell-mail?"¡$_
tiene carta!"'
Bash proporciona un valor predeterminado para esta variable,
pero la localización de los ficheros de correo del usuario que
emplea es dependiente del sistema (e.g., /var/spool/mail/$USER).
PS1 El valor de este parámetro se expande (vea INDICADORES abajo) y
se emplea como la cadena del indicador primario. El valor
predeterminado es ``\s-\v\$ ''.
PS2 El valor de este parámetro se expande como con PS1 y se emplea
como la cadena del indicador secundario. El valor predeterminado
es ``> ''.
PS3 El valor de este parámetro se emplea como el indicador para la
orden select (vea GRAMÁTICA DEL SHELL más arriba).
PS4 El valor de este parámetro se expande como con PS1 y el valor se
imprime antes de cada orden que bash muestra durante una traza
de ejecución. El primer carácter de PS4 se replica múltiples
veces, tantas como sean necesarias, para indicar múltiples
niveles de indirección. El valor predeterminado es ``+ ''.
TIMEFORMAT
El valor de este parámetro se emplea como una cadena de formato
para especificar cómo debe mostrarse la información de tiempos
para tuberías precedidas por la palabra reservada time. El
carácter % introduce una secuencia de escape que se expande a un
valor de tiempo o a otra información. Las secuencias de escape
y sus significados son como sigue; los corchetes denotan partes
opcionales.
%% Un % literal.
%[p][l]R El tiempo total transcurrido en segundos.
%[p][l]U El número de segundos de CPU gastados en modo usuario.
%[p][l]S El número de segundos de CPU gastados en modo sistema.
%P El porcentaje de CPU, computado como (%U + %S) ÷ %R.
La p opcional es un dígito que especifica la precisin, el
número de decimales. Un valor de 0 hace que no se muestre
ningún decimal, ni el punto o coma decimal. Como mucho se
pueden especificar tres decimales; valores de p mayores de 3 se
cambian a 3. Si p no se especifica, se usa precisamente el valor
3.
La l opcional especifica un formato más largo, incluyendo
minutos, en la forma MMmSS.FFs. El valor de p determina si se
incluye o no la fracción.
Si esta variable no está definida, bash actúa como si tuviera el
valor $'\nreal\t%3lR\nuser\t%3lU\nsys%3lS'. Si el valor es
nulo, no se muestra ninguna información de tiempos. Se añade un
salto de línea al final cuando se muestra la cadena de formato.
HISTSIZE
El número de órdenes a recordar en la historia de órdenes (vea
HISTORIA abajo). El valor predeterminado es 500.
HISTFILE
El nombre del fichero en el que se guarda la historia de órdenes
(vea HISTORIA abajo). El valor predeterminado es
~/.bash_history. Si no está definido, no se guarda la historia
de órdenes cuando se acaba un shell interactivo.
HISTFILESIZE
El número máximo de líneas contenidas en el fichero de historia.
Cuando se asigna un valor a esta variable, el fichero de
historia se trunca, si es menester, para contener no más de ese
número de líneas. El valor predeterminado es 500. El fichero de
historia se trunca también a este tamaño tras escribir en él
cuando un shell interactivo termina.
OPTERR Si se pone al valor 1, bash muestra mensajes de error generados
por la orden interna getopts (vea ÓRDENES INTERNAS DEL SHELL
abajo). OPTERR se inicia a 1 cada vez que se llama al shell o
cuando se ejecuta un guión del shell.
LANG Empleado para determinar la categoría de localización
("escenario") para cualquier categoría no seleccionada
específicamente con una variable de las que empiezan por LC_.
LC_ALL Esta variable tiene preferencia sobre el valor de LANG y de
cualquier otra variable de las que empiecen por LC_
especificando una categoría de localización.
LC_COLLATE
Esta variable determina el orden de clasificación empleado
cuando se ordene el resultado de una expansión de nombres de
caminos, y determina el comportamiento de expresiones de rango,
clases de equivalencia, y secuencias de clasificación dentro de
expansiones de nombres de caminos y concordancia de patrones.
LC_CTYPE
Esta variable determina la interpretación de caracteres y el
comportamiento de clases de caracteres dentro de expansiones de
nombres de caminos y concordancia de patrones.
LC_MESSAGES
Esta variable determina la localización empleada para traducir
cadenas entrecomilladas con comillas dobles precedidas por un $.
PROMPT_COMMAND
Si está definido, el valor se ejecuta como una orden antes de
mostrarse cada indicador primario.
IGNOREEOF
Controla la acción de un shell interactivo al recibir un
carácter EOF como sola entrada. Si está definido, el valor es el
número de caracteres EOF consecutivos que deben teclearse como
los primeros caracteres de una línea de entrada antes de que
bash acabe. Si la variable existe pero no tiene un valor
numérico, o ninguno, el valor predeterminado es 10. Si no
existe, EOF significa el final de la entrada para el shell.
TMOUT Si se define a un valor mayor que cero, el valor se interpreta
como el número de segundos que hay que esperar una entrada
después de mostrarse el indicador primario. Bash termina
después de esperar ese número de segundos si no recibe ninguna
entrada.
FCEDIT El editor predeterminado para la orden interna fc.
FIGNORE
Una lista de sufijos separados por dos puntos que no hay que
tener en cuenta cuando se realice una terminación de nombres de
ficheros (vea READLINE abajo). Un nombre de fichero cuyo sufijo
concuerde con una de las entradas en FIGNORE se excluye de la
lista de nombres de ficheros a completar. Un valor de muestra
es ``.o:~''.
GLOBIGNORE
Una lista de patrones separados por dos puntos que definen en
conjunto de nombres de ficheros que no hay que tener en cuenta
en la expansión de nombres de caminos. Si un nombre de fichero
que concordaba en un patrón de expansión de nombres de caminos
también concuerda con uno de los patrones en GLOBIGNORE, se
quita de la lista de concordancias.
INPUTRC
El nombre de fichero para el de inicio de readline, en vez del
predeterminado ~/.inputrc (vea READLINE abajo).
HISTCONTROL
Si se define a un valor de ignorespace, las líneas que comiencen
con un carácter espacio no se meten en la lista de historia. Si
se pone a un valor de ignoredups, las líneas que concuerden con
la última línea de la historia, no se meten. Un valor de
ignoreboth combina las dos opciones. Si no está definido, o si
lo está a otro valor distinto de los de antes, todas las líneas
leídas por el analizador léxico se guardan en la lista de la
historia, sujeto esto al valor de HISTIGNORE. La función de
esta variable ha sido tomada por HISTIGNORE. La segunda línea y
siguientes de una orden compuesta multi-línea no se comprueban,
y se añaden a la historia sin importar el valor de HISTCONTROL.
HISTIGNORE
Una lista de patrones separados por dos puntos empleados para
decidir qué líneas de órdenes deben guardarse en la lista de
historia. Cada patrón se ancla al principio de la línea y debe
especificar la línea completamente (no se añade ningún `*').
Cada patrón se comprueba con la línea tras aplicarse las
comprobaciones especificadas por HISTCONTROL. Además de los
caracteres normales de concordancia de patrones del shell, `&'
concuerda con la línea de historia anterior. `&' puede
protegerse empleando una barra inversa. Ésta se quita antes de
intentarse una concordancia. La segunda línea y siguientes de
una orden compuesta multi-línea no se comprueban, y se añaden a
la historia sin importar el valor de HISTIGNORE.
histchars
Los dos o tres caracteres que controlan la expansión y
separación en lexemas de la historia (vea EXPANSIÓN DE HISTORIA
abajo). El primer carácter es el carcter de expansin de
historia, el carácter que señala el comienzo de una expansión de
historia, normalmente `!'. El segundo carácter es el carácter
de sustitucin rpida, que se usa como una abreviatura para
reejecutar la orden anterior, sustituyendo una cadena por otra
en la orden. El valor predeterminado es `^'. El tercer
carácter, opcional, es el carácter que indica que el resto de la
línea es un comentario cuando se encuentra como el primer
carácter de una palabra, normalmente es `#'. El carácter de
comentario de historia hace que la sustitución de historia se
salte en el resto de palabras de la línea. No hace que
necesariamente el analizador léxico del shell trate al resto de
la línea como un a un comentario.
HOSTFILE
Contiene el nombre de un fichero con el mismo formato que
/etc/hosts que debería leerse cuando el shell necesite completar
un nombre de anfitrión (computador). El fichero puede ser
cambiado interactivamente; la siguiente vez que se intente
completar un nombre de computador, bash añade el contenido del
nuevo fichero a la base de datos ya existente.
auto_resume
Esta variable controla cómo el shell interactúa con el usuario
para el control de trabajos. Si esta variable está definida, las
órdenes simples de una palabra sin redirección se tratan como
candidatas para reanudar un trabajo existente parado. No se
permite ninguna ambigüedad; si hay más de un trabajo que empiece
con la cadena tecleada, se selecciona el trabajo al que se ha
accedido más recientemente. El nombre de un trabajo parado, en
este contexto, es la línea de órdenes empleada para arrancarlo.
Si se define al valor exact, la cadena suministrada debe
concordar exactamente con el nombre de un trabajo parado; si se
define como substring, la cadena suministrada necesita concordar
con una subcadena del nombre de un trabajo parado. El valor
substring proporciona una funcionalidad análoga a la del
identificador de trabajo %? (vea CONTROL DE TRABAJOS adelante).
Si se pone a cualquier otro valor, la cadena suministrada debe
ser un prefijo del nombre de un trabajo parado; esto proporciona
una funcionalidad análoga a la del identificador de trabajo %.
Vectores
Bash proporciona variables vectores, monodimensionales. Cualquier
variable puede usarse como un vector; la orden interna declare
declarará un vector explícitamente. No hay un límite máximo en el
tamaño de un vector, ni ningún requisito para que los miembros se
indexen o asignen de forma contigua. Los vectores se indexan empleando
enteros y su primer elemento es el de índice cero, como en C.
Un vector se crea automáticamente si se asigna algo a una variable con
la sintaxis nombre[ndice]=valor. El ndice se trata como una expresión
aritmética que debe evaluarse a un número mayor o igual a cero. Para
declarar un vector explícitamente, emplee declare -a nombre (vea
ÓRDENES INTERNAS DEL SHELL abajo). También se acepta declare -a
nombre[ndice], donde el ndice no se tiene en cuenta. Se pueden
especificar atributos para una variable vector mediante las órdenes
internas declare y readonly. Cada atributo se aplica a cada uno de los
miembros del vector.
Se asignan valores a los vectores mediante asignaciones compuestas de
la forma nombre=(valor1 ... valorn), donde cada valor es de la forma
[ndice]=cadena. Sólo cadena es necesario. Si se suministra el índice
entre corchetes y la asignación, se asigna a ese índice; si no, el
índice del elemento asignado es el último índice al que la sentencia le
asignó algo, más uno. Los índices empiezan en cero. Esta sintaxis
también la acepta la orden interna declare. Se puede asignar a los
elementos individuales del vector empleando la sintaxis
nombre[ndice]=valor, ya presentada antes.
Cualquier elemento de un vector puede referenciarse mediante
${nombre[ndice]}. Las llaves son necesarias para evitar conflictos
con la expansión de nombres de caminos. Si ndice es @ o *, la palabra
se expande a todos los miembros de nombre. Estos índices difieren
solamente cuando la palabra aparece entre comillas dobles. Si la
palabra está entre comillas dobles, ${nombre[*]} se expande a una sola
palabra con el valor de cada miembro del vector separados por el primer
carácter de la variable especial IFS, y ${nombre[@]} expande cada
elemento de nombre a una palabra separada. Cuando no hay miembros del
vector, ${nombre[@]} se expande a nada. Esto es análogo a la expansión
de los parámetros especiales * y @ (vea Parámetros especiales arriba).
${#nombre[ndice]} se expande a la longitud de ${nombre[ndice]}. Si
ndice es * o @, la expansión es el número de elementos del vector.
Referenciar una variable vector sin índice es equivalente a referenciar
el elemento cero.
La orden interna unset se emplea para destruir vectores. unset
nombre[ndice] destruye el elemento del vector con el ndice
especificado. unset nombre, donde nombre es un vector, o unset
nombre[ndice], donde ndice es * o @, borra el vector entero.
Las órdenes internas declare, local, y readonly aceptan cada una una
opción -a para especificar un vector (array). La orden interna read
acepta una -a para asignar una lista de palabras leídas desde la
entrada estándar a un vector. Las órdenes internas set y declare
muestran valores de un vector en una manera tal que les permite ser
reutilizadas como asignaciones.
EXPANSIÓN
La expansión se realiza en la línea de órdenes una vez que la orden ha
sido dividida en palabras. Hay siete clases de expansión: expansin de
llaves, expansin de tilde, expansin de parmetro y variable,
sustitucin de orden, expansin aritmtica, divisin de palabras,
expansin de nombre de camino.
La orden de las expansiones es: expansión de llaves, de tilde, de
parámetro, variable y aritmética, y sustitución de orden (hechas de
izquierda a derecha), división de palabras, y expansión de nombre de
camino.
En sistemas que puedan admitirla, hay una expansión adicional
disponible: sustitucin de proceso.
Sólo la expansión de llaves, división de palabras, y expansión de
nombre de camino, pueden cambiar el número de palabras de la expansión;
las otras expanden una palabra simple a otra palabra simple. Las únicas
excepciones a esto son las expansiones de "$@" y "${nombre[@]}" como se
ha explicado más arriba (vea PARÁMETROS).
Expansión de llaves
La expansin de llaves es un mecanismo por el cual pueden generarse
cadenas arbitrarias. Este mecanismo es similar a la expansin de nombre
de camino, pero los nombres de ficheros no necesitan existir. Los
patrones a ser expandidos con la expansión de llaves toman la forma de
un prembulo opcional seguido por una serie de cadenas separadas por
comas entre un par de llaves, seguido por un post scriptum opcional.
El preámbulo sirve de prefijo a cada cadena de entre las llaves, y el
post scriptum se añade luego a cada cadena resultante, expandiendo de
izquierda a derecha.
Las expansiones de llaves pueden anidarse. Los resultados de cada
cadena expandida no se ordenan; se preserva el orden de izquierda a
derecha. Por ejemplo, a{d,c,b}e se expande a `ade ace abe'.
La expansión de llaves se realiza antes que cualquier otra, y cualquier
carácter especial para otras expansiones se preserva en el resultado.
Es estrictamente textual. Bash no aplica ninguna interpretación
sintáctica al contexto de la expansión ni al texto entre las llaves.
Una expansión de llaves correctamente formada debe contener llaves de
apertura y cierre sin entrecomillar, y por lo menos una coma sin
entrecomillar. Cualquier expansión de llaves formada incorrectamente se
deja tal cual. Una { o , puede protegerse con una barra invertida para
evitar que sea considerada como parte de una expansión de llaves.
Esta construcción se emplea normalmente como una abreviatura cuando el
prefijo común de las cadenas a generar es mayor que en el ejemplo de
antes:
mkdir /usr/local/src/bash/{old,new,dist,bugs}
o
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
La expansión de llaves introduce una pequeña incompatibilidad con
versiones históricas de sh. sh no trata especialmente a las llaves de
apertura o cierre cuando aparecen como parte de una palabra, y las deja
en la entrada. Bash quita las llaves de palabras, como una
consecuencia de la expansión de llaves. Por ejemplo, una palabra
introducida a sh como fichero{1,2} aparece así mismo en la entrada. La
misma palabra se muestra como fichero1 fichero2 tras la expansión hecha
por bash. Si se desea una compatibilidad estricta con sh, arranque
bash con la opción +B o inhabilite la expansión de llaves con la opción
+B de la orden interna set (vea ÓRDENES INTERNAS DEL SHELL abajo).
Expansión de tilde
Si una palabra comienza con un carácter tilde de la ñ sin entrecomillar
(`~'), todos los caracteres que precedan a la primera barra inclinada
sin entrecomillar (o todos los caracteres, si no hay ninguna barra
inclinada sin proteger), se consideran un prefijo-tilde. Si ninguno de
los caracteres en el prefijo-tilde están protegidos, los caracteres en
el prefijo-tilde que siguen a la tilde se tratan como un posible nombre
de entrada de usuario (login). Si este nombre de entrada es la cadena
vacía, la tilde se reemplaza con el valor del parámetro del shell HOME.
Si HOME no está definida, se sustituye en su lugar el directorio de
trabajo inicial del usuario que está ejecutando el shell. De otra
forma, el prefijo-tilde se reemplaza con el directorio de trabajo
inicial (de casa) asociado con el nombre de entrada especificado.
Si el prefijo-tilde es un `~+', el valor de la variable del shell PWD
reemplaza al prefijo-tilde. Si el prefijo-tilde es un `~-', el valor
de la variable del shell OLDPWD, si está definido, se sustituye. Si
los caracteres que siguen a la tilde en el prefijo-tilde consisten en
un número N, prefijado opcionalmente por un `+' o un `-', el prefijo-
tilde se reemplaza con el elemento correspondiente de la pila de
directorios, como lo mostraría la orden interna dirs llamada con el
prefijo-tilde como argumento. Si los caracteres tras la tilde en el
prefijo-tilde consisten en un número sin un `+' ni `-' iniciales, se
supone `+'.
Si el nombre de entrada es inválido, o si la expansión de tilde falla,
la palabra se deja tal cual.
A cada asignación de variable se comprueba si hay prefijos-tilde sin
entrecomillar inmediatamente tras un : o un =. En estos casos, la
expansión de tilde también tiene lugar. Consecuentemente, uno puede
usar nombres de ficheros con tildes en asignaciones a PATH, MAILPATH, y
CDPATH, y el shell asigna el valor expandido.
Expansión de parámetro
El carácter `$' introduce la expansión de parámetro, sustitución de
orden, o expansión aritmética. El nombre de parámetro o símbolo a ser
expandido puede estar encerrado entre llaves, que son opcionales pero
sirven para proteger a la variable en la expansión de caracteres que la
sigan y puedan interpretarse como parte de su nombre.
Cuando se empleen llaves, la de cierre es la primera `}' no protegida
con una barra invertida o en una cadena entrecomillada, y no dentro de
una expansión aritmética empotrada, sustitución de orden, o expansión
de parámetro.
${parmetro}
Se sustituye el valor de parmetro. Se requieren llaves cuando
parmetro es un parámetro posicional de más de un dígito, o
cuando parmetro viene seguido por un carácter que no debe
interpretarse como parte de su nombre.
Si el primer carácter de parmetro es un signo de cierre de
exclamación, se introduce un nivel de indirección de variable. Bash
emplea el valor de la variable formada a partir del resto de parmetro
como el nombre de la variable; luego, esta variable se expande y ese
valor se emplea en el resto de la sustitución, en vez del propio valor
de parmetro. Esto se conoce como expansin indirecta.
En cada uno de los casos anteriores, palabra está sujeta a expansión de
tilde, expansión de parámetro, sustitución de orden, y expansión
aritmética. Cuando no se realiza la expansión de subcadena, bash
comprueba si un parámetro está sin definir o es nulo; si omitimos los
dos puntos la comprobación sólo es para la no definición del parámetro.
${parmetro:-palabra}
Emplear valores predeterminados. Si parmetro no está definido
o está vacío, se sustituye la expansión de palabra. De otro
modo, se sustituye el valor de parmetro.
${parmetro:=palabra}
Asignar valores predeterminados. Si parmetro no está definido
o es nulo, la expansión de palabra se asigna a parmetro.
Luego, el valor de parmetro se sustituye. No se puede asignar
nada de esta manera a los parámetros posicionales ni a los
especiales.
${parmetro:?palabra}
Muestra un error si no está definido o está vacío. Si parmetro
es nulo o no está definido, la expansión de palabra (o un
mensaje a tal efecto si palabra no está presente) se escribe en
la salida estándar de errores y el shell, si no es interactivo,
acaba. De otra manera, se sustituye el valor de parmetro.
${parmetro:+palabra}
Emplear un valor alternativo. Si parmetro está vacío o no está
definido, no se sustituye nada; de otro modo, se sustituye la
expansión de palabra.
${parmetro:desplazamiento}
${parmetro:desplazamiento:longitud}
Expansión de subcadena. Expande hasta longitud caracteres de
parmetro, empezando en los caracteres especificados por
desplazamiento. Si se omite la longitud, se expande a la
subcadena de parmetro, empezando en el carácter especificado
por desplazamiento. longitud y desplazamiento son expresiones
aritméticas (vea EVALUACIÓN ARITMÉTICA más abajo). longitud
debe evaluarse a un número mayor o igual a cero. Si
desplazamiento se evalúa a un número menor que cero, el valor se
emplea como un desplazamiento desde el final del valor de
parmetro. Si parmetro es @, el resultado es longitud
parámetros posicionales empezando en desplazamiento. Si
parmetro es un nombre de vector indexado por @ o *, el
resultado es longitud miembros del vector empezando con
${parmetro[desplazamiento]}. La indexación de la subcadena
empieza por cero a menos que se empleen los parámetros
posicionales, en cuyo caso empieza por 1.
${#parmetro}
Se sustituye la longitud en caracteres del valor de parmetro.
Si parmetro es * o @, el valor sustituido es el número de
parámetros posicionales. Si parmetro es un nombre de vector
indexado por * o @, el valor sustituido es el número de
elementos en el vector.
${parmetro#palabra}
${parmetro##palabra}
La palabra se expande para producir un patrón lo mismo que en
una expansión de nombre de camino. Si el patrón concuerda con el
principio del valor de parmetro, entonces el resultado de la
expansión es el valor expandido de parmetro con el patrón más
corto que concuerde (el caso ``#) o con el patrón más largo que
concuerde (el caso ``##'') eliminado. Si parmetro es @ o *, la
operación de borrado del patrón se aplica a cada parámetro
posicional por turnos, y la expansión es la lista resultante.
Si parmetro es una variable vector indexada con @ o *, la
operación de borrado del patrón se aplica a cada miembro del
vector por orden, y la expansión es la lista resultante.
${parmetro%palabra}
${parmetro%%palabra}
La palabra se expande para producir un patrón justo como en la
expansión de nombre de camino. Si el patrón concuerda con una
porción del final del valor expandido de parmetro, entonces el
resultado de la expansión es el valor expandido de parmetro con
el patrón más corto que concuerde (el caso ``%'') o el más largo
(el caso ``%%'') borrado. Si parmetro es @ o *, la operación
de borrado del patrón se aplica a cada parámetro posicional por
orden, y la expansión es la lista resultante. Si parmetro es
una variable vector indexada por @ o *, la operación de borrado
del patrón se aplica a cada miembro del vector por orden, y la
expansión es la lista resultante.
${parmetro/patrn/cadena}
${parmetro//patrn/cadena}
El patrn se expande para producir un patrón justo como en la
expansión de nombre de camino. parmetro se expande y la
concordancia más larga de patrn contra este valor se reemplaza
por cadena. En la primera forma, sólo se reemplaza la primera
concordancia. La segunda forma hace que todas las concordancias
de patrn se reemplacen con cadena. Si patrn empieza por #,
debe concordar con el principio de la cadena. Si patrn empieza
por %, debe concordar con el final de la cadena. Si cadena está
vacía, las concordancias de patrn se borran y el / que sigue al
patrn puede omitirse. Si parmetro es @ o *, la operación de
sustitución se aplica a cada parámetro posicional por orden, y
la expansión es la lista resultante. Si parmetro es una
variable vector indexada por @ o *, la operación de sustitución
se aplica a cada miembro del vector por orden, y la expansión es
la lista resultante.
Sustitución de orden
La sustitucin de orden permite a la salida de una orden reemplazar al
nombre de la orden. Hay dos formas:
$(orden)
u
`orden`
Bash realiza la expansión ejecutando orden y reemplazando la
sustitución de orden con la salida estándar de la orden, quitando los
saltos de línea finales. Los saltos de línea empotrados no se borran,
pero pueden ser eliminados durante la división de palabras. La
sustitución de orden $(cat fichero) puede reemplazarse por lo
equivalente pero más rápido $(< fichero).
Cuando se emplea la forma de sustitución al viejo estilo con las
comillas inversas, la barra invertida mantiene su significado literal
excepto cuando es seguida por $, `, o \. La primera comilla inversa no
precedida por una barra invertida termina la sustitución de orden.
Cuando se emplea la forma $(orden), todos los caracteres entre los
paréntesis forman parte de la orden; ninguno se trata especialmente.
Las sustituciones de orden pueden anidarse. Para anidar cuando se
emplee la forma de comillas inversas, proteja las comillas inversas
internas con barras inversas.
Si la sustitución aparece dentro de las dobles comillas, la división de
palabras y la expansión de nombres no se realiza en los resultados.
Expansión aritmética
La expansión aritmética permite la evaluación de una expresión
aritmética y la sustitución del resultado. El formato para la expansión
aritmética es:
$((expresin))
La expresin se trata como si estuviera entre comillas dobles, pero un
signo de doble comilla dentro de los paréntesis no se trata
especialmente. Todos los lexemas en la expresión están sujetos a
expansión de parámetro, expansión de cadena, sustitución de orden, y
eliminación de comillas. Las sustituciones aritméticas pueden
anidarse.
La evaluación se realiza de acuerdo a las reglas listadas más abajo en
EVALUACIÓN ARITMÉTICA. Si expresin no es válida, bash imprime un
mensaje indicando el fallo y no ocurre ninguna sustitución.
Sustitución de proceso
La sustitucin de proceso se admite en sistemas que acepten tuberías
con nombre (FIFOs) o el método /dev/fd de nombrar ficheros abiertos.
Toma una de las formas siguientes: <(lista) o >(lista). El proceso
lista se ejecuta con su entrada o salida conectada a un FIFO o a algún
fichero en /dev/fd. El nombre de este fichero se pasa como argumento a
la orden en curso como el resultado de la expansión. Si se emplea la
forma >(lista), escribir en el fichero proporciona la entrada para
lista. Si se emplea la forma <(lista), el fichero pasado como
argumento deberá leerse para obtener la salida de lista.
Cuando esté disponible, se realiza la sustitucin de proceso
simultáneamente con la expansión de parámetro y variable, sustitución
de orden y expansión aritmética.
División de palabras
El shell examina los resultados de la expansión de parámetro,
sustitución de orden y expansión aritmética que no ocurrieron dentro de
comillas dobles para realizar la divisin de palabras.
El shell trata cada carácter de IFS como un delimitador, y divide los
resultados de las otras expansiones en palabras separadas por estos
caracteres. Si IFS no está definido, o su valor es exactamente
<espacio><tab><nueva-línea>, el valor predeterminado, entonces
cualquier secuencia de caracteres de IFS sirve para delimitar palabras.
Si IFS tiene algún otro valor, entonces las secuencias de los
caracteres blancos espacio y tabulador no se tienen en cuenta al
principio y al final de la palabra, siempre que el carácter de espacio
en blanco esté en el valor de IFS (un carácter de espacio en blanco de
IFS). Cualquier carácter en IFS que no sea espacio en blanco de IFS,
junto con cualquier carácter de espacio en blanco adyacente de IFS,
delimita un campo. Una secuencia de caracteres de espacio en blanco de
IFS también se trata como un delimitador. Si el valor de IFS es nulo,
no se realiza la división de palabras.
Los argumentos nulos explícitos ("" o '') se mantienen. Los argumentos
nulos no protegidos implícitos, resultantes de la expansión de
parmetros que no tienen valores, se eliminan. Si un parámetro sin
ningún valor se expande dentro de comillas dobles, el resultado es un
argumento nulo, y es mantenido.
Observe que si no hay expansión, tampoco se realiza la división de
palabras.
Expansión de nombre de camino
Tras la división de palabras, a menos que la opción -f esté puesta,
bash examina cada palabra buscando los caracteres *, ?, (, y [. Si uno
de estos caracteres aparece, entonces la palabra se considera como un
patrn, y se reemplaza por una lista ordenada alfabéticamente de
nombres de ficheros que concuerden con el patrón. Si no se encuentran
nombres de ficheros concordantes, y la opción del shell nullglob está
deshabilitada, la palabra se deja tal cual. Si la opción nullglob está
puesta, y no ha habido ninguna concordancia, la palabra se elimina. Si
la opción del shell nocaseglob está puesta, la búsqueda de la
concordancia se realiza sin importar si los caracteres alfabéticos son
letras mayúsculas o minúsculas. Cuando un patrón se usa para expansión
de nombre de camino, el carácter ``.'' al principio de un nombre o
inmediatamente después de una barra inclinada debe concordar
explícitamente, a menos que esté puesta la opción del shell dotglob.
En la concordancia de un nombre de camino, el carácter de barra
inclinada debe siempre coincidir explícitamente. En otros casos, el
carácter ``.'' no se trata de forma especial. Vea la descripción de
shopt más abajo en ÓRDENES INTERNAS DEL SHELL para una descripción de
las opciones del shell nocaseglob, nullglob, y dotglob.
La variable del shell GLOBIGNORE puede utilizarse para restringir el
conjunto de nombres de ficheros que concuerden con un patrn. Si
GLOBIGNORE está definido, cada nombre de fichero concordante que
también coincida con uno de los patrones en GLOBIGNORE se quita de la
lista de concordancias. Los nombres de fichero ``.'' y ``..'' nunca
son tenidos en cuenta, incluso cuando GLOBIGNORE esté puesto. Sin
embargo, definir GLOBIGNORE tiene el efecto de activar la opción del
shell dotglob, de modo que todos los otros nombres de fichero que
comiencen con un ``.'' concordarán. Para obtener el comportamiento
antiguo de no hacer caso de nombres de ficheros que comienzan con un
``.'', haga que ``.*'' sea uno de los patrones de GLOBIGNORE. La
opción dotglob está deshabilitada cuando GLOBIGNORE no está definido.
Patrones
Cualquier carácter que aparezca en un patrón, aparte de los especiales
descritos más adelante, concuerda consigo mismo. El carácter NUL no
puede estar en un patrón. Los caracteres de patrón especiales deben
protegerse si han de concordar literalmente consigo mismos.
Los caracteres de patrón especiales tienen los siguientes significados:
* Concuerda con cualquier cadena de caracteres, incluida la cadena
vacía.
? Concuerda con un solo carácter cualquiera.
[...] Concuerda con uno de los caracteres entre corchetes. Un par de
caracteres separados por un signo menos denota un rango;
cualquier carácter léxicamente entre esos dos, incluidos,
concuerda. Si el primer carácter tras el [ es un ! o un ^,
entonces la concordancia es con cualquier carácter de los que no
estén entre los corchetes. Un - puede representarse para la
concordancia incluyéndolo como el primer o último carácter del
conjunto. Un ] puede hacerse concordar incluyéndolo como el
primer carácter del conjunto.
Dentro de [ y ], se pueden especificar clases de caracteres
mediante la sintaxis [:clase:], donde clase es una de las
siguientes clases definidas en el estándar POSIX.2:
alnum alpha ascii blank cntrl digit graph lower print punct
space upper xdigit
Una clase de caracteres concuerda con cualquier carácter que
pertenezca a esa clase.
Dentro de [ y ], una clase de equivalencia se puede especificar
empleando la sintaxis [=c=], que concuerda con todos los
caracteres con el mismo peso de clasificación (tal como lo
defina la localización en curso) que el carácter c.
Dentro de [ y ], la sintaxis [.smbolo.] concuerda con el
símbolo de clasificación smbolo.
Si la opción del shell extglob se activa usando la orden interna shopt,
se reconocen algunos operadores de patrones extendidos. En la siguiente
descripción, una lista-patrn es una lista de uno o más patrones
separados por un |. Se pueden formar patrones compuestos usando uno o
más de los siguientes sub-patrones:
?(lista-patrn)
Concuerda con ninguna o una ocurrencia de los patrones
dados
*(lista-patrn)
Concuerda con ninguna o más ocurrencias de los patrones
dados
+(lista-patrn)
Concuerda con una o más ocurrencias de los patrones dados
@(lista-patrn)
Concuerda exactamente con uno de los patrones dados
!(lista-patrn)
Concuerda con cualquier cosa excepto con uno de los
patrones dados
Eliminación de comillas
Tras las expansiones precedentes, todas las ocurrencias no
entrecomilladas de los caracteres \, ', y " que no resulten de una de
las expansiones anteriores, se eliminan.
REDIRECCIÓN
Antes de que se ejecute una orden, su entrada y salida pueden ser
redirigidas usando una notación especial interpretada por el shell. La
redirección también se puede emplear para abrir y cerrar ficheros en el
entorno de ejecución del shell en curso. Los operadores de redirección
siguientes pueden preceder o aparecer en cualquier sitio de una orden
simple o pueden ir detrás de una orden. Las redirecciones se procesan
en el orden en el que aparecen, de izquierda a derecha.
En las descripciones siguientes, si se omite el número del descriptor
de fichero, y el primer carácter del operador de redirección es <, la
redirección se refiere a la entrada estándar (descriptor de fichero 0).
Si el primer carácter del operador de redirección es >, la redirección
se refiere a la salida estándar (descriptor de fichero 1).
La palabra tras el operador de redirección en las descripciones
siguientes, a menos que se diga otra cosa, está sujeta a la expansión
de llaves, expansión de tilde, expansión de parámetro, sustitución de
orden, expansión aritmética, eliminación de comillas, y expansión de
nombre de camino. Si se expande a más de una palabra, bash informa de
un error.
Observe que el orden de las redirecciones es significativo. Por
ejemplo, la orden
ls > listadir 2>&1
dirige la salida estándar normal y la de errores, ambas, al fichero
listadir, mientras que la orden
ls 2>&1 > listadir
dirige solamente la salida estándar al fichero listadir, porque la
salida de errores estándar se ha duplicado como salida estándar antes
de que ésta se redirigiera a listadir.
Un fallo en la apertura o creación de un fichero hace que la
redirección fracase.
Redirección de la entrada
La redirección de la entrada hace que el fichero cuyo nombre resulte de
la expansión de palabra se abra para lectura en el descriptor de
fichero n, o la entrada estándar (descriptor de fichero 0) si no se
especificó n.
El formato general para la redirección de la entrada es:
[n]<palabra
Redirección de la salida
la redirección de la salida hace que el fichero cuyo nombre resulte de
la expansión de palabra se abra para escritura en el descriptor de
fichero n, o la salida estándar (descriptor de fichero 1) si n no se
especificó. Si el fichero no existe se crea; si existe se trunca a
longitud cero, se vacía.
El formato general para la redirección de la salida es:
[n]>palabra
Si el operador de redirección es >, y la opción noclobber de la orden
interna set ha sido activada, la redirección fallará si el nombre de
fichero resultante de la expansión de palabra existiera y fuera un
fichero regular. Si el operador de redirección es >|, o es > y la
opción noclobber de la orden interna set no está activada, la
redirección se intenta incluso si el fichero nombrado por palabra
existe.
Añadir a la salida redirigida
La redirección de la salida en esta forma hace que el fichero cuyo
nombre resulte de la expansión de palabra se abra para añadir en el
descriptor de fichero n, o la salida estándar (descriptor de fichero 1)
si n no se especificó. Si el fichero no existe, se crea.
El formato general para añadir a la salida es:
[n]>>palabra
Redirección de la salida estándar normal y de errores
Bash permite que ambas salidas estándares, la normal (descriptor de
fichero 1) y la de errores (descriptor de fichero 2) se redirijan hacia
el fichero cuyo nombre sea la expansión de palabra con esta
construcción.
hay dos formatos para la redirección de la salida estándar y la salida
de errores:
&>palabra
y
>&palabra
De las dos formas, es preferible la primera. Ésta es semánticamente
equivalente a
>palabra 2>&1
Documentos internos
Este tipo de redirección instruye al shell a leer la entrada desde la
fuente en curso hasta que vea una línea que contenga solamente palabra
(sin blancos detrás). Todas las líneas leídas hasta ese punto se
emplean como la entrada estándar de una orden.
El formato de los documentos internos es como sigue:
<<[-]palabra
documento-interno
delimitador
No se realiza la expansión de parámetro, sustitución de orden,
expansión de nombre de camino ni expansión aritmética en palabra. Si
cualquier carácter de palabra está entrecomillado, el delimitador es el
resultado de la eliminación de comillas en palabra, y las líneas en el
documento interno no se expanden. Si palabra no está entrecomillada,
todas las líneas del documento interno están sujetas a expansión de
parámetro, sustitución de orden y expansión aritmética. En el último
caso, el par \<nueva-línea> no se tiene en cuenta, y debe emplearse \
para proteger los caracteres \, $, y `.
Si el operador de redirección es <<-, entonces se quitan de las líneas
de la entrada todos los caracteres de tabulación iniciales, así como de
la línea que contiene delimitador. Esto permite que los documentos
internos dentro de guiones del shell se sangren de manera natural.
Duplicación de descriptores de fichero
El operador de redirección
[n]<&palabra
se emplea para duplicar descriptores de ficheros de entrada. Si
palabra se expande a uno o más dígitos, el descriptor de fichero
denotado por n se hace ser una copia de este descriptor de fichero. Si
los dígitos en palabra no especifican un descriptor de fichero abierto
para entrada, se produce un error de redirección. Si palabra se evalúa
a -, el descriptor de fichero n se cierra. Si n no se especifica, se
emplea la entrada estándar (descriptor de fichero 0).
El operador
[n]>&palabra
se emplea similarmente para duplicar descriptores de ficheros de
salida. Si n no se especificó, se emplea la salida estándar (descriptor
de fichero 1). Si los dígitos en palabra no especifican un descriptor
de fichero abierto para salida, se produce un error de redirección.
Como un caso especial, si n se omite, y palabra no se expande a uno o
más dígitos, se redirigen la salida estándar y la salida estándar de
errores como se describió con anterioridad.
Apertura de descriptores de ficheros para lectura y escritura
El operador de redirección
[n]<>palabra
hace que el fichero cuyo nombres sea la expansión de palabra se abra
para lectura y para escritura en el descriptor de fichero n, o en el
descriptor de fichero 0 si no se especifica n. Si el fichero no
existe, se crea.
ALIAS
Los alias permiten que una cadena se sustituya por una palabra cuando
se emplee como la primera palabra de una orden simple. El shell
mantiene una lista de alias que pueden ponerse y quitarse con las
órdenes internas alias y unalias (vea ÓRDENES INTERNAS DEL SHELL
abajo). Se mira a ver si la primera palabra de cada orden, si no está
entrecomillada, tiene un alias. Si es así, cada palabra se reemplaza
con el texto del alias. El nombre del alias y el texto de reemplazo
pueden contener cualquier entrada válida para el shell, incluyendo los
metacaracteres listados arriba, con la excepción de que el nombre del
alias no puede contener un =. La primera palabra del texto de reemplazo
se comprueba si es un alias, pero si es un alias idéntico al que se
está expandiendo, no se expande una segunda vez. Esto significa que uno
puede poner un alias ls a ls -F, por ejemplo, y bash no intenta
expandir recursivamente el texto de reemplazo. Si el último carácter
del valor del alias es un blanco, entonces la siguiente palabra de la
orden que sigue al alias también se mira para la expansión de alias.
Los alias se crean y listan con la orden alias, y se quitan con la
orden unalias.
No hay ningún mecanismo para poder usar argumentos en el texto de
reemplazo. Si se necesitan, debería emplearse mejor una función del
shell.
Los alias no se expanden cuando el shell no es interactivo, a menos que
se haya puesto la opción expand_aliases mediante shopt (vea la
descripción de shopt bajo ÓRDENES INTERNAS DEL SHELL abajo).
Las reglas que conciernen a la definición y uso de los alias son algo
confusas. Bash siempre lee por lo menos una línea completa de entrada
antes de ejecutar cualquiera de las órdenes de esa línea. Los alias se
expanden cuando se lee una orden, no cuando se ejecuta. Por lo tanto,
una definición de alias que aparezca en la misma línea que otra orden
no tiene efecto hasta que se lea la siguiente línea de entrada. Las
órdenes que sigan a la definición de alias en esa línea no se ven
afectadas por el nuevo alias. Este comportamiento también hay que
tenerlo en cuenta cuando se ejecutan funciones. Los alias se expanden
cuando se lee una definición de función, no cuando la función se
ejecuta, porque una definición de función es en sí misma una orden
compuesta. Como consecuencia, los alias definidos en una función no
están disponibles hasta después de que esa función se ejecute. Para
asegurarse, ponga siempre las definiciones de alias en una línea
separada, y no emplee la orden alias en órdenes compuestas.
Para casi cualquier propósito, los alias pueden sustituirse por
funciones del shell.
FUNCIONES
Una función del shell, definida como se describió anteriormente bajo
GRAMÁTICA DEL SHELL, guarda una serie de órdenes para una ejecución
posterior. Las funciones se ejecutan en el contexto del shell en
curso; no se crea ningún nuevo proceso para interpretarlas (en
contraste con la ejecución de un guión del shell). Cuando una función
se ejecuta, los argumentos de la función se convierten en los
parámetros posicionales durante su ejecución. El parámetro especial #
se actualiza para reflejar el cambio. El parámetro posicional 0
permanece intacto. Todos los demás aspectos del entorno de ejecución
del shell son idénticos entre una función y quien la llama con la
excepción de que la trampa DEBUG (vea la descripción de la orden
interna trap bajo ÓRDENES INTERNAS DEL SHELL más adelante) no se
hereda.
Variables locales a la función se pueden declarar con la orden interna
local. Normalmente, las variables y sus valores se comparten entre la
función y quien la llama, como variables globales.
Si se ejecuta la orden interna return en una función, éste se acaba y
la ejecución se reanuda con la siguiente orden tras la llamada a la
función. Cuando una función se completa, los valores de los parámetros
posicionales y el parámetro especial # se restauran a los valores que
tenían antes de la ejecución de la función.
Los nombres de función y sus definiciones pueden listarse con la opción
-f de las órdenes internas declare o typeset. La opción -F de declare
o typeset listará solamente los nombres de las funciones. Las
funciones pueden exportarse de modo que los subshells las tengan
definidas automáticamente con la opción -f de la orden interna export.
Las funciones pueden ser recursivas. No se impone ningún límite en el
número de llamadas recursivas.
EVALUACIÓN ARITMÉTICA
El shell permite que se evalúen expresiones aritméticas, bajo ciertas
circunstancias (vea la orden interna let y Expansión aritmética). La
evaluación se hace con enteros largos sin comprobación de
desbordamiento, aunque la división por 0 se atrapa y se señala como un
error. La lista siguiente de operadores se agrupa en niveles de
operadores de igual precedencia. Los niveles se listan en orden de
precedencia decreciente.
- + menos y más unarios
! ~ negación lógica y de bits
** exponenciación
* / % multiplicación, división, resto
+ - adición, sustracción
<< >> desplazamientos de bits a izquierda y derecha
<= >= < >
comparación
== != igualdad y desigualdad
& Y de bits (AND)
^ O exclusivo de bits (XOR)
| O inclusivo de bits (OR)
&& Y lógico (AND)
|| O lógico (OR)
expr?expr:expr
evaluación condicional
= *= /= %= += -= <<= >>= &= ^= |=
asignación
Se permite que las variables del shell actúen como operandos; se
realiza la expansión de parámetro antes de la evaluación de la
expresión. El valor de un parámetro se fuerza a un entero largo dentro
de una expresión. Una variable del shell no necesita tener activado su
atributo de entero para emplearse en una expresión.
Las constantes con un 0 inicial se interpretan como números octales.
Un 0x ó 0X inicial denota un número en hexadecimal. De otro modo, los
números toman la forma [base#]n, donde base es un número en base 10
entre 2 y 64 que representa la base aritmética, y n es un número en esa
base. Si base se omite, entonces se emplea la base 10. Los dígitos
mayores que 9 se representan por las letras minúsculas, las metras
mayúsculas, _, y @, en este orden. Si base es menor o igual que 36,
las letras minúsculas y mayúsculas pueden emplearse indistintamente
para representar números entre 10 y 35.
Los operadores se evalúan en orden de precedencia. Las sub-expresiones
entre paréntesis se evalúan primero y pueden sustituir a las reglas de
precedencia anteriores.
EXPRESIONES CONDICIONALES
Las expresiones condicionales son empleadas por la orden compuesta [[ y
por las órdenes internas test y [ para comprobar los atributos de
ficheros y realizar comparaciones de cadenas y aritméticas. Las
expresiones se forman a partir de las primarias monarias o binarias
siguientes. Si cualquier argumento fichero de una de estas primarias
es de la forma /dev/fd/n, entonces se comprueba el descriptor de
fichero n.
-a fichero
Verdad si fichero existe.
-b fichero
Verdad si fichero existe y es un fichero especial de bloques.
-c fichero
Verdad si fichero existe y es un fichero especial de caracteres.
-d fichero
Verdad si fichero existe y es un directorio.
-e fichero
Verdad si fichero existe.
-f fichero
Verdad si fichero existe y es un fichero regular.
-g fichero
Verdad si fichero existe y tiene el bit SGID.
-k fichero
Verdad si fichero existe y tiene el bit ``pegajoso'' (STIcky).
-p fichero
Verdad si fichero existe y es una tubería con nombre (FIFO).
-r fichero
Verdad si fichero existe y se puede leer.
-s fichero
Verdad si fichero existe y tiene un tamaño mayor que cero.
-t fd Verdad si el descriptor de fichero fd está abierto y se refiere
a una terminal.
-u fichero
Verdad si fichero existe y tiene el bit SUID.
-w fichero
Verdad si fichero existe y se puede modificar.
-x fichero
Verdad si fichero existe y es ejecutable.
-O fichero
Verdad si fichero existe y su propietario es el UID efectivo.
-G fichero
Verdad si fichero existe y su grupo es el GID efectivo.
-L fichero
Verdad si fichero existe y es un enlace simbólico o blando.
-S fichero
Verdad si fichero existe y es un zócalo (socket).
-N fichero
Verdad si fichero existe y ha sido modificado desde que se leyó
la última vez.
fichero1 -nt fichero2
Verdad si fichero1 es más reciente (según la fecha de
modificación) que fichero2.
fichero1 -ot fichero2
Verdad si fichero1 es más antiguo que fichero2.
fichero1 -ef fichero2
Verdad si fichero1 y fichero2 tienen los mismos números de
nodo-í y de dispositivo.
-o nombre-opcin
Verdad si la opción del shell nombre-opcin está activada. Vea
la lista de opciones bajo la descripción de la opción -o de la
orden interna set más abajo.
-z cadena
Verdad si la longitud de cadena es cero.
-n cadena
cadena Verdad si la longitud de cadena no es cero.
cadena1 == cadena2
Verdad si las cadenas son iguales. También se puede emplear =
en vez de ==.
cadena1 != cadena2
Verdad si las cadenas no son iguales.
cadena1 < cadena2
Verdad si cadena1 se ordena lexicográficamente antes de cadena2
en la localización en curso.
cadena1 > cadena2
Verdad si cadena1 se clasifica lexicográficamente tras cadena2
en la localización en curso.
arg1 OP arg2
OP es uno de -eq, -ne, -lt, -le, -gt, o -ge. Estos operadores
aritméticos binarios devuelven verdadero si arg1 es igual a,
distinto de, menor que, menor o igual a, mayor que, o mayor o
igual a arg2, respectivamente. Arg1 y arg2 pueden ser enteros
positivos o negativos.
EXPANSIÓN DE ORDEN SIMPLE
Cuando se ejecuta una orden simple, el shell realiza las siguientes
expansiones, asignaciones y redirecciones, de izquierda a derecha.
1. Las palabras que el analizador ha marcado como asignaciones de
variables (aquéllas que preceden al nombre de la orden) y
redirecciones se guardan para un procesado posterior.
2. Las palabras que no sean asignaciones de variables ni
redirecciones se expanden. Si tras la expansión quedan aún
palabras, la primera palabra se toma como el nombre de la orden
y las palabras restantes son los argumentos.
3. Se ejecutan las redirecciones como se describió más arriba bajo
REDIRECCIÓN.
4. El texto tras el = en cada asignación de variable está sujeto a
expansión de tilde, expansión de parámetro, sustitución de
orden, expansión aritmética y eliminado de comillas antes de ser
asignado a la variable.
Si no resulta ningún nombre de orden, las asignaciones de variables
afectan al entorno actual del shell. De otro modo, las variables se
añaden al entorno de la orden ejecutada y no afectan al entorno del
shell en curso. Si cualquiera de las asignaciones intenta dar un valor
a una variable de lectura exclusiva, se produce un error, y la orden
acaba con un estado distinto de cero.
Si no resulta ningún nombre de orden, se hacen las redirecciones, pero
no afectan al entorno del shell en curso. Un error de redirección hace
que el shell acabe con un estado distinto de cero.
Si hay un nombre de orden tras la expansión, la ejecución procede como
se describió antes. De otro modo, la orden sale. Si una de las
expansiones contenía una sustitución de orden, el estado de salida de
la orden es el de la última sustitución de orden realizada. Si no había
sustituciones de órdenes, la orden acaba con un estado de cero.
EJECUCIÓN DE ÓRDENES
Después de que una orden ha sido dividida en palabras, si el resultado
es una orden simple y una lista opcional de argumentos, tienen lugar
las siguientes acciones.
Si el nombre de la orden no contiene barras inclinadas, el shell
intenta localizarla. Si existe una función del shell con ese nombre,
esa función se llama como se describió arriba en FUNCIONES. Si el
nombre no coincide con el de ninguna función, el shell lo busca en la
lista de órdenes internas. Si se encuentra, se llama a la orden interna
correspondiente.
Si el nombre no es ni una función del shell ni una orden interna, y no
contiene barras inclinadas, bash busca en cada elemento de PATH un
directorio que contenga un fichero ejecutable con ese nombre. Bash
emplea una tabla de dispersión (hash) para recordar los nombres de
camino completos de los ficheros ejecutables (vea hash en ÓRDENES
INTERNAS DEL SHELL abajo). Sólo se realiza una búsqueda completa de
los directorios de PATH si la orden no se encuentra en la tabla de
dispersión. Si la búsqueda no es satisfactoria, el shell muestra un
mensaje de error y devuelve un estado de salida de 127.
Si la búsqueda fue exitosa, o si el nombre de la orden contiene una o
más barras inclinadas, el shell ejecuta el programa con ese nombre en
un entorno de ejecución separado. El argumento 0 se pone al nombre
dado, y el resto de argumentos de la orden se ponen a los argumentos
dados, si los hay.
Si esta ejecución fallara porque el fichero no tuviera un formato
ejecutable, y el fichero no fuera un directorio, se supone que es un
guin del shell, un fichero que contiene órdenes del shell. Se crea un
subshell para ejecutarlo. Este subshell se reinicia a sí mismo, así
que el efecto es el mismo que si se hubiera llamado a un nuevo shell
para manejar el guión, con la excepción de que el hijo retiene las
localizaciones de órdenes recordadas por el padre (vea hash abajo en
ÓRDENES INTERNAS DEL SHELL).
Si el programa es un fichero que empieza con los dos caracteres #!, el
resto de la primera línea especifica un intérprete para el programa. El
shell ejecuta el intérprete especificado en sistemas operativos que no
manejen por sí mismos este formato de ejecutable. Los argumentos del
intérprete consisten en un solo argumento opcional tras el nombre del
intérprete en la primera linea del programa, seguido del nombre del
programa, seguido por los argumentos de la orden, si los hubiera.
ENTORNO DE EJECUCIÓN DE ÓRDENES
El shell tiene un entorno de ejecucin, que consiste en lo siguiente:
· ficheros abiertos heredados por el shell en la llamada, quizás
modificada por redirecciones suministradas a la orden interna
exec
· el directorio de trabajo en curso, establecido por cd, pushd o
popd, o heredado por el shell en la llamada
· la máscara de modo de creación de ficheros, establecida por
umask o heredada del padre del shell
· las trampas en curso establecidas por trap
· parámetros del shell que han sido establecidos por asignaciones
de variables o con set, o heredados del padre del shell en el
entorno
· funciones del shell definidas durante la ejecución o heredadas
del padre del shell en el entorno
· opciones activadas en la llamada (bien por omisión o mediante
argumentos en la línea de órdenes) o por set
· opciones activadas mediante shopt
· alias del shell definidos con alias
· varios identificadores de proceso, incluyendo los de trabajos en
segundo plano, el valor de $$, y el valor de $PPID
Cuando una orden simple distinta de una interna o una función del shell
se va a ejecutar, se llama en un entorno de ejecución separado que
consiste en lo siguiente. A menos que se diga otra cosa, los valores se
heredan del shell.
· los ficheros abiertos del shell, más las modificaciones y
adiciones especificadas en la orden por redirecciones
· el directorio de trabajo en curso
· la máscara de modo de creación de ficheros
· variables del shell marcadas para la exportación, junto con
variables exportadas para la orden, pasadas en el entorno
· las trampas capturadas por el shell se restauran a los valores
del padre del shell, y las trampas que no son tenidas en cuenta
por el shell tampoco lo son
Una orden llamada en este entorno separado no puede afectar al entorno
de ejecución del shell.
La sustitución de órdenes y las órdenes asíncronas se llaman en un
entorno de subshell que es un duplicado del entorno del shell, excepto
que las trampas capturadas por el shell se restauran a los valores que
el shell heredó de su padre en la llamada. Las órdenes internas que se
llaman como parte de una tubería se ejecutan también en un entorno de
subshell. Los cambios hechos al entorno del subshell no pueden afectar
al entorno de ejecución del shell.
ENTORNO
Cuando se llama a un programa, se le da un vector de cadenas de
caracteres llamado el entorno. Esto es una lista de parejas
nombre-valor, de la forma nombre=valor.
El shell le permite manipular el entorno de varias maneras. En la hora
de la llamada, el shell escudriña el entorno y crea un parámetro para
cada nombre encontrado, marcándolo automáticamente para la exportacin
a procesos hijos. Las órdenes ejecutadas heredan el entorno. Las
órdenes export y declare -x permiten añadir y quitar parámetros y
funciones del entorno. Si el valor de un parámetro en el entorno se
modifica, el nuevo valor pasa a formar parte del entorno, reemplazando
al antiguo. El entorno heredado por cualquier orden ejecutada consiste
en el entorno inicial del shell, cuyos valores pueden ser modificados
en el shell, menos las parejas quitadas mediante la orden unset más las
adiciones con las órdenes export y declare -x.
El entorno para cualquier orden simple o función puede aumentarse
temporalmente prefijándola con asignaciones de parámetros, como se
describió arriba en PARÁMETROS. Estas sentencias de asignación afectan
solamente al entorno visto por esa orden.
Si la opción -k está puesta (vea la orden interna set más adelante),
entonces todas las asignaciones de parámetros se ponen en el entorno
para una orden, no sólo las que preceden a su nombre.
Cuando bash llama a una orden externa, la variable _ se pone con el
nombre completo del fichero de la orden y se pasa a esa orden en su
entorno.
ESTADO DE SALIDA
Para los propósitos del shell, una orden que acabe con un estado de
salida cero, ha tenido éxito. Un estado de salida de cero indica éxito.
Un estado de salida distinto de cero indica fallo. Cuando una orden
termina por una señal fatal, bash emplea el valor de 128+señal como el
estado de salida.
Si una orden no se encuentra, el proceso hijo creado para ejecutarla
devuelve un estado de 127. Si una orden se encuentra pero no es
ejecutable, el estado de salida es 126.
Si una orden falla debido a un error durante la expansión o
redirección, el estado de salida es mayor que cero.
Las órdenes incorporadas en el shell devuelven un estado de 0 (verdad)
si acaban con éxito, y distinto de cero (falso) si ocurre un error
mientras se ejecutan. Todas las órdenes internas devuelven un estado
de salida de 2 para indicar un modo de empleo incorrecto.
El propio bash devuelve el estado de salida de la última orden
ejecutada, a menos que ocurra un error de sintaxis, en cuyo caso acaba
con un estado distinto de cero. Vea también la orden interna exit
abajo.
SEÑALES
Cuando bash es interactivo, en la ausencia de trampas, no hace caso de
SIGTERM (de modo que kill 0 no mata un shell interactivo), y se captura
y maneja SIGINT (de manera que la orden interna wait es interrumpible).
En todos los casos, bash no hace caso de SIGQUIT. Si el control de
trabajos tiene efecto, bash no hace caso de SIGTTIN, SIGTTOU, y
SIGTSTP.
Los trabajos síncronos empezados por bash tienen manejadores de señal
puestos a los valores heredados por el shell de su padre. Cuando el
control de trabajo no está en efecto, las órdenes internas no hacen
caso de SIGINT ni SIGQUIT tampoco. Las órdenes ejecutadas como
resultado de sustitución de orden no hacen caso de las señales de
control de trabajo generadas mediante el teclado SIGTTIN, SIGTTOU, ni
SIGTSTP.
El shell, de forma predeterminada, acaba cuando recibe una señal
SIGHUP. Antes de salir, reenvía la señal SIGHUP a todos los trabajos,
en ejecución o parados. A los trabajos parados se les envía SIGCONT
para asegurarse de que reciben la señal SIGHUP. Para prevenir que el
shell envíe la señal a un trabajo particular, debería quitarse de la
lista de trabajos con la orden interna disown (vea ÓRDENES INTERNAS DEL
SHELL más abajo) o marcarlo para no recibir SIGHUP empleando disown -h.
Si la opción del shell huponexit se ha puesto mediante shopt, bash
envía una señal SIGHUP a todos los trabajos cuando un shell de entrada
interactivo se acaba.
Cuando bash recibe una señal para la que se ha puesto una trampa
mientras se se está esperando que una orden se complete, la trampa no
se ejecutará hasta que la orden se complete. Cuando bash está
esperando una orden asíncrona mediante la orden interna wait, la
recepción de una señal para la que se ha definido una trampa, hará que
la orden interna wait regrese inmediatamente con un estado de salida
mayor que 128, inmediatamente tras que se ejecute la trampa.
CONTROL DE TRABAJOS
El control de trabajos se refiere a la capacidad de parar
selectivamente (suspender) la ejecución de procesos y continuar
(reanudar) su ejecución posteriormente. Un usuario emplea esta
facilidad típicamente a través de una interfaz interactiva suministrada
conjuntamente por el controlador de terminal del sistema y bash.
El shell asocia un trabajo con cada tubería. Mantiene una tabla de
trabajos ejecutándose actualmente, que pueden listarse con la orden
jobs. Cuando bash arranca un trabajo asíncronamente (en segundo
plano), imprime una línea con un aspecto como ésta:
[1] 25647
indicando que este trabajo es el número 1 y que el PID del último
proceso en la tubería asociada con él es 25647. Todos los procesos en
una misma tubería son miembros del mismo trabajo. Bash emplea la
abstracción del trabajo como la base para el control de trabajos.
Para facilitar la implementación de la interfaz del usuario al control
de trabajos, el sistema mantiene la noción de un identificador (ID) de
grupo de procesos de la terminal en curso. Los miembros de este grupo
de procesos (procesos cuyo PGID es igual al PGID de la terminal en
curso) reciben señales generadas por el teclado como SIGINT. Se dice
que estos procesos están en primer plano. Los procesos en segundo
plano son aquéllos cuyo PGID difiere del de la terminal; tales procesos
son inmunes a señales generadas desde el teclado. Sólo los procesos en
primer plano tienen permitido leer o escribir en la terminal. A los
procesos en segundo plano que intenten leer de (o escribir en) la
terminal, el controlador de terminal les manda una señal SIGTTIN
(SIGTTOU) que, a menos que sea capturada, suspende el proceso.
Si el sistema operativo en el que bash se está ejecutando, admite el
control de trabajos (Linux lo admite, por supuesto), bash le permite
usarlo. Teclear el carácter suspender (típicamente ^Z, Control-Z)
mientras que un proceso se está ejecutando, hace que ese proceso se
pare y le devuelve a Ud. al bash. Teclear el carácter suspensin
diferida (típicamente ^Y, Control-Y) hace que el proceso se pare cuando
intente leer entrada desde la terminal, y el control se devuelve a
bash. El usuario puede entonces manipular el estado de este trabajo,
empleando la orden bg para continuar con él en segundo plano, la orden
fg para continuar con él en primer plano, o la orden kill para matarlo.
Un ^Z tiene efecto inmediatamente, y tiene el efecto adicional
colateral de que la salida pendiente y lo que haya en el búfer de
entrada del teclado se descartan.
Hay varias formas de referirse a un trabajo en el shell. El carácter %
introduce un nombre de trabajo. El trabajo número n puede ser
referenciado como %n. Un trabajo puede ser referenciado utilizando un
prefijo del nombre empleado para arrancarlo, o usando una subcadena que
aparezca en su línea de órdenes. Por ejemplo. %ce se refiere a un
trabajo ce parado. Si un prefijo concuerda con más de un trabajo, bash
informa de un error. Usar %?ce, por otra parte, se refiere a cualquier
trabajo que contenga la cadena ce en su línea de órdenes. Si la
subcadena concuerda con más de un trabajo, bash informa de un error.
Los símbolos %% y %+ se refieren a la noción que tiene el shell del
trabajo en curso, que es el último trabajo parado mientras estaba en
primer plano o se arrancó en segundo plano. El trabajo anterior puede
referenciarse usando %-. En la salida relativa a trabajos (e.g., la
salida de la orden jobs), el trabajo actual se marca siempre con un +,
y el anterior con un -.
Si simplemente damos el nombre de un trabajo, esto puede traerlo a
primer plano: %1 es un sinónimo de ``fg %1'', que trae el trabajo
número 1 desde el segundo plano al primero. Similarmente, ``%1 &''
reanuda el trabajo 1 en el segundo plano, equivalente a ``bg %1''.
El shell se entera inmediatamente de cuando un trabajo cambia de
estado. Normalmente, bash espera hasta que está a punto de mostrar un
indicador antes de informar de cambios en el estado de un trabajo, para
no interrumpir cualquier otra salida. Si la opción -b de la orden
interna set está activada, bash informa de tales cambios
inmediatamente.
Si se intenta salir de bash mientras hay trabajos parados, el shell
muestra un mensaje de aviso. La orden jobs se puede usar entonces para
inspeccionar sus estados. Si se hace un segundo intento de salir sin
ninguna otra orden intermedia, el shell no muestra ningún otro aviso, y
los trabajos parados se hacen terminar.
INDICADORES
Cuando se ejecuta interactivamente, bash muestra el indicador primario
PS1 cuando está dispuesto para leer una orden, y el secundario PS2
cuando necesita más entrada para completar una orden. Bash permite que
estas cadenas indicadoras se personalicen insertando un número de
caracteres especiales protegidos con la barra inversa, que se
interpretan como sigue:
\a un carácter de alerta ASCII (07)
\d la fecha en el formato "Día-Semana Mes Día" (ejemplo,
"Tue May 26") en inglés
\e un carácter de escape (ESC) ASCII (033)
\h el nombre del computador anfitrión hasta el primer `.'
\H el nombre del computador anfitrión completo
\n salto de línea
\r retorno de carro
\s el nombre del shell, el nombre base de $0 (la porción que
sigue a la última barra inclinada)
\t la hora actual en el formato de 24 horas HH:MM:SS
\T la hora actual en el formato de 12 horas HH:MM:SS
\@ la hora actual en el formato de 12 horas con indicador
AM/PM
\u el nombre de usuario del usuario en curso
\v la versión de bash (e.g., 2.00)
\V la distribución de bash, versión + nivel de parcheo
(e.g., 2.00.0)
\w el directorio de trabajo en curso
\W el nombre base del directorio de trabajo
\! el número de historia de esta orden
\# el número de orden de esta orden
\$ si el UID efectivo es 0 (el super-usuario), un #, si no
un $
\nnn el carácter correspondiente al número octal nnn
\\ una barra inclinada invertida
\[ empieza una secuencia de caracteres no imprimibles, que
pueden emplearse para empotrar una secuencia de control
del terminal en el indicador
\] termina una secuencia de caracteres no imprimibles
El número de orden y el número de historia son usualmente diferentes:
el número de historia de una orden es su posición en la lista de
historia, que puede incluir órdenes restauradas desde el fichero de
historia (vea HISTORIA más abajo), mientras que el número de orden es
la posición en la secuencia de órdenes ejecutadas durante la sesión de
shell actual. Después de que la cadena es descodificada, se expande
mediante la expansión de parámetros, sustitución de órdenes, expansión
aritmética, expansión de cadena, y eliminación de comillas, sujeta al
valor de la opción del shell promptvars (vea la descripción de la orden
shopt bajo ÓRDENES INTERNAS DEL SHELL más adelante).
READLINE
Readline (leer línea) es la biblioteca que maneja la lectura de la
entrada cuando se usa un shell interactivo, a menos que se haya dado la
opción --noediting cuando se llamó. De forma predeterminada, las
órdenes de edición de la línea son similares a las de emacs. También
se dispone de una interfaz de edición de líneas al estilo de vi. Para
desactivar la edición de líneas una vez que el shell está en ejecución,
use las opciones +o emacs o +o vi de la orden interna set (vea ÓRDENES
INTERNAS DEL SHELL abajo).
Notación de Readline
En esta sección, se emplea la notación al estilo de emacs para denotar
las teclas. Las teclas de control se representan por medio de C-tecla;
así, C-n significa Control-N. De forma similar, las teclas meta (Alt)
se representan con M-tecla, de forma que M-x significa Meta-X. (En
teclados sin tecla meta, M-x significa ESC x, i.e., pulsar la tecla de
escape (Esc) y luego la tecla x. Esto hace que ESC sea el prefijo
meta. La combinación M-C-x quiere decir ESC-Control-x, o pulsar la
tecla Escape y luego mantener presionada la tecla Control mientras se
pulsa la tecla x.)
Las órdenes de readline pueden recibir argumentos numéricos que actúan
normalmente como un número de repetición. Algunas veces, empero, lo
que tiene significado es el signo del argumento. Pasar un argumento
negativo a una orden que actúa en la dirección adelante (p. ej.,
kill-line) hace que esa orden actúe en la dirección contraria, hacia
atrás. Las órdenes cuyo comportamiento con argumentos se desvíe de
esto se señalan más adelante.
Cuando una orden se describe como que corta texto, el texto borrado se
guarda para una posible futura recuperación (pegado). El texto cortado
se guarda en un anillo de corte. Cortes consecutivos hacen que el texto
se acumule en una unidad, que puede pegarse toda de golpe, de una vez.
Las órdenes que no cortan texto separan los trozos de texto en el
anillo de corte.
Inicio de Readline
Readline se personaliza poniendo órdenes en un fichero de inicio (el
fichero inputrc). El nombre de este fichero se toma del valor de la
variable INPUTRC. Si esta variable no está definida, el valor
predeterminado es ~/.inputrc. Cuando un programa que hace uso de la
biblioteca readline arranca, el fichero de inicio se lee, y se
establecen las definiciones de teclas y variables. Sólo se permiten
unas pocas construcciones básicas en el fichero de inicio de readline.
Las líneas en blanco no se tienen en cuenta. Las líneas que comiencen
con un # son comentarios. Las líneas que comiencen con un $ indican
construcciones condicionales. Otras líneas representan definiciones de
teclas y definiciones de variables.
Las definiciones predeterminadas de teclas pueden cambiarse con un
fichero inputrc. Otros programas que usen esta biblioteca pueden
añadir sus propias órdenes y definiciones.
Por ejemplo, el poner
M-Control-u: universal-argument
o
C-Meta-u: universal-argument
dentro del fichero inputrc haría que M-C-u ejecutara la orden de
readline universal-argument.
Se reconocen los siguientes nombres simbólicos de caracteres: RUBOUT,
DEL, ESC, LFD, NEWLINE, RET, RETURN, SPC, SPACE, y TAB. Además de los
nombres de órdenes, readline permite que se enlace una tecla cualquiera
a una cadena de caracteres que se inserta cuando la tecla se pulse (una
macro).
Definiciones de teclas de Readline
La sintaxis para controlar las definiciones de teclas en el fichero
inputrc es simple. Todo lo que se requiere es el nombre de la orden o
el texto de una macro y una secuencia de teclas con la cual debe
enlazarse. El nombre se puede especificar en una de dos formas: como un
nombre simbólico de tecla, posiblemente con prefijos Meta- o Control-,
o como una secuencia de teclas. Cuando se use la forma nombre-
tecla:nombre-funcin o macro, nombre-tecla es el nombre de una tecla en
inglés. Por ejemplo:
Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> salida"
En el ejemplo de arriba, C-u se enlaza a la función universal-argument,
M-DEL se vincula a la función backward-kill-word, y C-o se define como
que se ejecute la macro expresada en la parte derecha (esto es,
insertar el texto > salida en la línea).
En la segunda forma, "sectecla":nombre-funcin o macro, sectecla
difiere de la nombre-tecla de antes en que las cadenas que representan
una secuencia entera de teclas pueden especificarse poniendo la
secuencia entre comillas dobles. Así se pueden utilizar algunas teclas
de escape al estilo de GNU Emacs, como en el siguiente ejemplo.
"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Tecla de Función 1"
En este ejemplo, C-u se enlaza de nuevo a la función
universal-argument. C-x C-r se vincula a la función re-read-init-file,
y ESC [ 1 1 ~ se define como que se inserte el texto Tecla de Función
1. El conjunto completo de las secuencias de escape al estilo de GNU
Emacs es
\C- prefijo de control
\M- prefijo meta
\e un carácter de Escape
\\ barra inclinada inversa
\" una " literal
\' un ' literal
Además de las secuencias de escape al estilo de GNU Emacs, se dispone
de un segundo conjunto de escapes con la barra invertida:
\a alerta (campana)
\b espacio atrás
\d borrado
\f salto de página
\n salto de línea
\r retorno de carro
\t tabulador horizontal
\v tabulador vertical
\nnn el carácter cuyo código es el valor octal nnn (de 1 a 3
dígitos)
\xnnn el carácter cuyo código es el valor hexadecimal nnn (de 1
a 3 dígitos)
Cuando se mete el texto de una macro, se deben emplear comillas simples
o dobles para indicar una definición de macro. El texto no
entrecomillado se supone un nombre de función. En el cuerpo de la
macro, los escapes con barra inversa de arriba se expanden. La barra
inversa protegerá a cualquier otro carácter en el texto de la macro,
incluyendo a " y a '.
Bash permite mostrar o modificar las definiciones de teclas en curso
mediante la orden interna bind. El modo de edición puede cambiarse
durante una sesión interactiva empleando la opción -o de la orden
interna set (vea ÓRDENES INTERNAS DEL SHELL abajo).
Variables de Readline
Readline tiene variables que se pueden usar para personalizar más aún
su comportamiento. Una variable se puede definir en el fichero inputrc
con una sentencia de la forma
set nombre-variable valor
Excepto cuando se diga, las variables de readline pueden tomar los
valores On u Off. Las variables y sus valores predeterminados son:
bell-style (audible)
Controla qué pasa cuando readline quiere tocar el pito de la
terminal. Si se define como none, readline nunca toca el pito.
Si se pone a visible, readline usa una alerta visible si está
disponible. Si se pone como audible, readline intenta hacer
sonar el pito de la terminal.
comment-begin (``#'')
La cadena que se inserta cuando se ejecuta la orden de readline
insert-comment. Esta orden está enlazada a M-# en modo emacs y
a # en modo vi.
completion-ignore-case (Off)
Si se pone a On, readline realiza la concordancia y terminación
de nombres de ficheros sin importar si las letras son mayúsculas
o minúsculas.
completion-query-items (100)
Esto determina cuándo se pregunta al usuario si quiere ver el
número de terminaciones posibles generadas por la orden
possible-completions. Puede ponerse a cualquier valor entero
mayor o igual a cero. Si el número de posibles terminaciones es
mayor o igual que el valor de esta variable, al usuario se le
pregunta si desea o no verlas; si no, simplemente se muestran en
la terminal.
convert-meta (On)
Si se pone a On, readline convertirá caracteres con el octavo
bit a uno a una secuencia de teclas ASCII poniendo el octavo bit
a cero y prefijando un carácter Esc (en efecto, usando Esc como
el prefijo meta).
disable-completion (Off)
Si se pone a On, readline inhibirá la terminación de palabras.
Los caracteres para la terminación se insertarán en la línea
como si se hubieran hecho corresponder con self-insert.
editing-mode (emacs)
Controla si readline empieza con un conjunto de definiciones de
teclas similar a las de emacs o vi. editing-mode puede ponerse
a los valores emacs o vi.
enable-keypad (Off)
Cuando se pone a On, readline intentará activar el teclado
auxiliar cuando se llame. Algunos sistemas necesitan esto para
activar las teclas de flechas de cursor.
expand-tilde (Off)
Si se pone a on, la expansión de tilde se realiza cuando
readline intenta la terminación de palabras.
horizontal-scroll-mode (Off)
Cuando se pone a On, esto hace que readline use una sola línea
para pantalla, haciendo rodar la entrada horizontalmente en una
sola línea de la pantalla cuando ésta es más larga que la
anchura de la pantalla; en lugar de seguir en la línea
siguiente.
input-meta (Off)
Si se pone a On, readline habilitará la entrada de 8 bits (esto
es, no pondrá a cero el octavo bit de los caracteres que lea),
sin importar lo que la terminal diga que admite. El nombre
meta-flag es un sinónimo para esta variable.
keymap (emacs)
Establece el mapa de teclado actual para readline. El conjunto
de nombres de mapas de teclado válidos es emacs, emacs-standard,
emacs-meta, emacs-ctlx, vi, vi-command, y vi-insert. vi es
equivalente a vi-command; emacs es equivalente a emacs-standard.
El valor predeterminado es emacs; el valor de editing-mode
también afecta al mapa de teclado predeterminado.
mark-directories (On)
Si se pone a On, los nombres de directorios completados tendrán
una barra inclinada añadida al final.
mark-modified-lines (Off)
Si se pone a On, las líneas de historia que hayan sido
modificadas se muestran con un asterisco precediéndolas (*).
output-meta (Off)
Si se pone a On, readline mostrará directamente los caracteres
con el octavo bit a uno, en vez de como una secuencia de escape
prefijada con meta.
print-completions-horizontally (Off)
Si se pone a On, readline mostrará terminaciones con
concordancias clasificadas horizontalmente en orden alfabético,
en vez de verticalmente.
show-all-if-ambiguous (Off)
Esto altera el comportamiento predeterminado de las funciones de
terminación. Si se pone a on, las palabras que tienen más de una
posible terminación hacen que las concordancias se muestren
inmediatamente en vez de tocarse el pito de la terminal.
visible-stats (Off)
Si se pone a On, se añade un carácter que represente un tipo de
fichero según lo que devuelve stat(2) cuando se listan las
terminaciones posibles.
Construcciones condicionales de Readline
Readline implementa una facilidad similar en espíritu a las
características de compilación condicional del preprocesador de C que
permite que las definiciones de teclas y variables se realicen en
función de pruebas o condiciones. Hay cuatro directivas del analizador
que se usan.
$if La construcción $if permite que las definiciones se hagan según
el modo de edición, la terminal en uso, o la aplicación que haga
uso de readline. El texto de la condición se extiende hasta el
final de la línea; no se requieren caracteres para aislarla.
mode La forma mode= de la directiva $if se usa para ver si
readline está en modo emacs o vi. Esto se puede emplear
en conjunción con la orden set keymap, por ejemplo, para
poner el teclado en los mapas emacs-standard y emacs-ctlx
sólo si readline está arrancando en modo emacs.
term La forma term= puede emplearse para incluir definiciones
de teclas específicas de una terminal determinada, quizás
para enlazar las secuencias de teclas generadas por las
teclas de función de la terminal. La palabra en la parte
derecha del = se prueba contra el nombre completo de la
terminal y contra la porción del nombre de la terminal
antes del primer -. Esto permite que sun concuerde con
sun y con sun-cmd, por ejemplo.
application
La construcción application se emplea para incluir
definiciones específicas de la aplicación. Cada programa
que usa la biblioteca readline define el nombre de la
aplicacin, y en un fichero de arranque se puede
comprobar si existe un valor en particular. Esto se
podría emplear para enlazar secuencias de teclas a
funciones útiles para un programa específico. Por
ejemplo, la orden siguiente añade una secuencia de teclas
que entrecomilla la palabra en curso o la anterior en
bash:
$if Bash
# Entrecomilla la palabra actual o previa
"\C-xq": "\eb\"\ef\""
$endif
$endif Esta orden, como se ha visto en el ejemplo precedente, termina
una orden $if.
$else Las órdenes en esta rama de la directiva $if se ejecutan si la
comprobación falla.
$include
Esta directiva toma como argumento un solo nombre de fichero y
lee órdenes y definiciones de ese fichero. Por ejemplo, la
siguiente directiva leería de /etc/inputrc:
$include /etc/inputrc
Búsquedas
Readline proporciona órdenes para buscar a través de la historia de
órdenes (vea HISTORIA abajo) líneas que contengan una cadena
especificada. Hay dos modos de búsqueda: incremental y no incremental.
La búsqueda incremental comienza antes de que el usuario haya acabado
de teclear la cadena a buscar. Tan pronto como se teclea cada carácter
de la cadena de búsqueda, readline muestra la siguiente entrada de la
historia que concuerde con la cadena que se esté tecleando hasta este
punto. Una búsqueda incremental requiere solamente tantos caracteres
como se necesiten para encontrar la entrada deseada en la lista de
historia. El carácter Escape se emplea para terminar una búsqueda
incremental. Control-J también dará por terminada la búsqueda.
Control-G parará abruptamente una búsqueda incremental y restaurará la
línea original. Cuando la búsqueda se termine, la entrada de la
historia que contuviera la cadena de búsqueda se convierte en la línea
en curso. Para encontrar otras entradas en la lista de historia,
teclee Control-S o Control-R, según sea apropiado. Esto buscará hacia
atrás o adelante en la historia la siguiente entrada concordante con
la cadena de búsqueda tecleada hasta este punto. Cualquier otra
secuencia de teclas asociada a una orden de readline terminará la
búsqueda y ejecutará esa orden. Por ejemplo, una nueva-lnea terminará
la búsqueda y aceptará la línea, ejecutando de ese modo la orden de la
lista de historia.
Las búsquedas no incrementales leen la cadena de búsqueda entera antes
de empezar a buscar en las líneas de la lista de historia. La cadena de
búsqueda puede ser tecleada por el usuario o ser parte de los
contenidos de la línea en curso.
Nombres de órdenes de Readline
Lo siguiente es una lista de los nombres de las órdenes y las
secuencias de teclas predeterminadas a las que están asociadas. Los
nombres de órdenes sin una secuencia de tecla acompañante pertenecen a
órdenes que no están asociadas a ninguna secuencia de teclas de forma
predeterminada.
Órdenes para el movimiento
beginning-of-line (C-a)
Mover al principio de la línea en curso.
end-of-line (C-e)
Mover al final de la línea.
forward-char (C-f)
Mover un carácter hacia adelante.
backward-char (C-b)
Mover un carácter hacia atrás.
forward-word (M-f)
Mover adelante hasta el final de la siguiente palabra. Las
palabras se componen de caracteres alfanuméricos (letras y
dígitos).
backward-word (M-b)
Mover atrás hasta el principio de esta palabra o la anterior.
Las palabras se componen de caracteres alfanuméricos (letras y
dígitos).
clear-screen (C-l)
Limpiar la pantalla dejando la línea en curso al principio de la
pantalla. Con un argumento, refresca la línea en curso sin
borrar la pantalla.
redraw-current-line
Refrescar la línea en curso.
Órdenes para manipular la lista de historia
accept-line (Nueva-línea, Intro)
Aceptar la línea sin importar dónde esté el cursor. Si esta
línea no está vacía, añadirla a la lista de historia de acuerdo
con el estado de la variable HISTCONTROL. Si la línea es una de
las de la historia, modificada, entonces restaurar la línea de
la historia a su estado original.
previous-history (C-p)
Obtener la orden anterior de la lista de historia, moviéndose
hacia atrás en ella.
next-history (C-n)
Obtener la orden siguiente de la lista de historia, moviéndose
hacia delante en ella.
beginning-of-history (M-<)
Mover a la primera línea de la lista de historia.
end-of-history (M->)
Mover al final de la historia de entrada; esto es, la línea que
está siendo introducida en la actualidad.
reverse-search-history (C-r)
Buscar hacia atrás empezando en la línea en curso y moviéndose
`arriba' a través de la lista de historia si es necesario. Esta
búsqueda es incremental.
forward-search-history (C-s)
Buscar hacia adelante empezando en la linea en curso y
moviéndose `abajo' a través de la lista de historia si es
necesario. Esta búsqueda es incremental.
non-incremental-reverse-search-history (M-p)
Buscar hacia atrás a través de la lista de historia empezando en
la línea en curso empleando una búsqueda no incremental de una
cadena suministrada por el usuario.
non-incremental-forward-search-history (M-n)
Buscar hacia delante a través de la lista de historia empezando
en la línea en curso empleando una búsqueda no incremental de
una cadena suministrada por el usuario.
history-search-forward
Buscar hacia delante a través de la lista de historia una cadena
de caracteres entre el comienzo de la línea en curso y la
posición actual del cursor (el punto). Esta búsqueda no es
incremental.
history-search-backward
Buscar hacia atrás a través de la lista de historia una cadena
de caracteres entre el comienzo de la línea en curso y la
posición actual del cursor (el punto). Esta búsqueda no es
incremental.
yank-nth-arg (M-C-y)
Insertar el primer argumento de la orden anterior (normalmente
la segunda palabra de la línea previa) en el punto (la posición
actual del cursor). Con un argumento n, insertar la n-sima
palabra de la orden anterior (las palabras en la orden anterior
empiezan con la palabra 0). Un argumento negativo inserta la
n-sima palabra desde el final de la orden anterior.
yank-last-arg (M-., M-_)
Insertar el último argumento de la orden anterior (la última
palabra de la entrada anterior de la lista de historia). Con un
argumento, se comporta exactamente como yank-nth-arg. Llamadas
sucesivas a yank-last-arg mueven hacia atrás en la lista de
historia, insertando cada vez el último argumento de cada línea.
shell-expand-line (M-C-e)
Expandir la línea como hace el shell. Esto realiza la expansión
de alias y de historia así como todas las expansiones de palabra
del shell. Vea EXPANSIÓN DE HISTORIA abajo para una descripción
de la expansión de historia.
history-expand-line (M-^)
Realizar la expansión de historia en la línea en curso. Vea
EXPANSIÓN DE HISTORIA abajo para una descripción de la expansión
de historia.
magic-space
Efectuar la expansión de historia en la línea en curso e
insertar un espacio. Vea EXPANSIÓN DE HISTORIA abajo para una
descripción de la expansión de historia.
alias-expand-line
Realizar la expansión de alias en la línea en curso. Vea ALIAS
arriba para una descripción de la expansión de alias.
history-and-alias-expand-line
Realizar la expansión de historia y alias en la línea en curso.
insert-last-argument (M-., M-_)
Un sinónimo para yank-last-arg.
operate-and-get-next (C-o)
Aceptar la línea en curso para la ejecución y obtener la línea
siguiente relativa a la actual desde la lista de historia, para
la edición. Cualquier argumento no se tiene en cuenta.
Órdenes para cambiar el texto
delete-char (C-d)
Borrar el carácter bajo el cursor. Si el punto está al principio
de la línea, no hay caracteres en la línea, y el último carácter
tecleado no estaba asociado a delete-char, entonces devolver
EOF.
backward-delete-char (<X], DEL)
Borrar el carácter tras el cursor. Cuando se da un argumento
numérico, guardar el texto borrado en el anillo de corte.
quoted-insert (C-q, C-v)
Añadir el siguiente carácter tecleado a la línea tal cual. Así
es como se pueden insertar caracteres como C-q, por ejemplo.
tab-insert (C-v TAB)
Insertar un carácter de tabulación.
self-insert (a, b, A, 1, !, ...)
Insertar el carácter tecleado.
transpose-chars (C-t)
Arrastrar el carácter antes del punto hacia adelante sobre el
carácter en el punto. El punto se mueve adelante también. Si el
punto está al final de la línea, entonces transpone los dos
caracteres antes del punto. Los argumentos negativos no
funcionan.
transpose-words (M-t)
Arrastrar la palabra tras el cursor al lugar pasado la palabra
enfrente del cursor, moviendo el cursor también sobre esa
palabra.
upcase-word (M-u)
Poner en mayúsculas la palabra en curso (o la siguiente). Con un
argumento negativo, pone la anterior, pero no mueve el punto.
downcase-word (M-l)
Poner en minúsculas la palabra en curso (o la siguiente). Con
un argumento negativo, pone la anterior, pero no mueve el punto.
capitalize-word (M-c)
Poner en mayúscula la inicial de la palabra en curso (o la
siguiente). Con un argumento negativo, pone la anterior, pero
no mueve el punto.
Cortar y pegar
kill-line (C-k)
Cortar el texto desde la posición actual del cursor hasta el
final de la línea.
backward-kill-line (C-x DEL)
Cortar hacia atrás hasta el principio de la línea.
unix-line-discard (C-u)
Cortar hacia atrás desde el punto hasta el principio de la
línea. El texto cortado se guarda en el anillo de corte.
kill-whole-line
Cortar todos los caracteres de la línea en curso, sin importar
dónde esté el cursor.
kill-word (M-d)
Cortar desde el cursor hasta el final de la palabra en curso, o
si entre palabras, hasta el final de la siguiente. Los extremos
de las palabras son los mismos que los empleados por
forward-word.
backward-kill-word (M-DEL)
Cortar la palabra tras el cursor. Los extremos de las palabras
son los mismos que los empleados por backward-word.
unix-word-rubout (C-w)
Cortar la palabra tras el cursor, empleando el espacio en blanco
como un límite de palabra. Los extremos de las palabras son
diferentes de los de backward-kill-word.
delete-horizontal-space (M-\)
Borrar todos los espacios y tabuladores alrededor del punto.
kill-region
Cortar el texto entre el punto y la marca (posición registrada
del cursor). Este texto se conoce como la regin.
copy-region-as-kill
Copiar el texto en la región al anillo de corte.
copy-backward-word
Copiar la palabra antes del punto al búfer de corte. Los
extremos de palabras son los mismos que con backward-word.
copy-forward-word
Copiar la palabra que sigue al punto al búfer de corte. Los
extremos de palabra son los mismos que con forward-word.
yank (C-y)
Pegar la cima del anillo de corte en el búfer en donde esté el
cursor.
yank-pop (M-y)
Rotar en el anillo de corte, y pegar la nueva cima. Sólo
funciona tras un yank o yank-pop.
Argumentos numéricos
digit-argument (M-0, M-1, ..., M--)
Añadir este dígito al argumento, acumulándolo, o comenzar con un
nuevo argumento. M-- empieza un argumento negativo.
universal-argument
Ésta es otra forma de especificar un argumento. Si esta orden
se hace seguir de uno o más dígitos, opcionalmente con un signo
menos inicial, estos dígitos definen el argumento. Si a la
orden siguen dígitos, ejecutar de nuevo universal-argument
finaliza el argumento numérico, pero si no, no se tiene en
cuenta. Como un caso especial, si a esta orden sigue
inmediatamente un carácter que no es ni un dígito ni un signo
menos, el número del argumento para la siguiente orden se
multiplica por cuatro. El número del argumento es inicialmente
uno, así que ejecutar esta función por primera vez hace que el
número del argumento sea cuatro, una segunda vez lo hace
dieciséis, y así sucesivamente.
Terminación
complete (TAB)
Intentar realizar una terminación del texto antes del punto.
Bash intenta la terminación tratando al texto como una variable
(si el texto comienza con $), como un nombre de usuario (si el
texto empieza con ~), como un nombre de computador anfitrión (si
el texto comienza con @), o como una orden (incluyendo alias y
funciones), por este orden. Si nada de esto concuerda, se
intenta la terminación de un nombre de fichero.
possible-completions (M-?)
Listar las terminaciones posibles del texto antes del punto.
insert-completions (M-*)
Insertar todas las terminaciones del texto antes del punto que
habrían sido generadas por possible-completions.
menu-complete
Similar a complete, pero reemplaza la palabra a ser completada
con una sola concordancia de la lista de terminaciones posibles.
La ejecución repetida de menu-complete camina por la lista de
terminaciones posibles, insertando cada concordancia por turnos.
Al final de la lista de terminaciones, se hace sonar el pito de
la terminal y el texto original se restaura. Un argumento n
mueve n posiciones hacia delante en la lista de concordancias;
un argumento negativo se puede emplear para moverse hacia atrás
en la lista. Esta orden está pensada para ser asociada a TAB,
pero no está asociada a ninguna tecla de forma predeterminada.
complete-filename (M-/)
Intentar la terminación de un nombre de fichero en el texto
antes del punto.
possible-filename-completions (C-x /)
Listar las posibles terminaciones del texto antes del punto,
tratándolo como un nombre de fichero.
complete-username (M-~)
Intentar la terminación del texto antes del punto, tratándolo
como un nombre de usuario.
possible-username-completions (C-x ~)
Listar las posibles terminaciones del texto antes del punto,
tratándolo como un nombre de usuario.
complete-variable (M-$)
Intentar la terminación del texto antes del punto, tratándolo
como una variable del shell.
possible-variable-completions (C-x $)
Listar las posibles terminaciones del texto antes del punto,
tratándolo como una variable del shell.
complete-hostname (M-@)
Intentar la terminación del texto antes del punto, tratándolo
como un nombre de computador anfitrión.
possible-hostname-completions (C-x @)
Listar las posibles terminaciones del texto antes del punto,
tratándolo como un nombre de computador anfitrión.
complete-command (M-!)
Intentar la terminación del texto antes del punto, tratándolo
como un nombre de orden. La terminación de orden intenta hacer
concordar el texto con alias, palabras reservadas, funciones del
shell, órdenes internas del shell, y finalmente nombres de
ficheros ejecutables, en ese orden.
possible-command-completions (C-x !)
Listar las posibles terminaciones del texto antes del punto,
tratándolo como un nombre de orden.
dynamic-complete-history (M-TAB)
Intentar la terminación del texto antes del punto, comparando el
texto con líneas de la lista de historia buscando concordancias
para la terminación.
complete-into-braces (M-{)
Efectuar la terminación de nombres de ficheros y devolver la
lista de terminaciones posibles encerrada entre llaves de forma
que la lista esté disponible al shell (vea Expansión de llaves
arriba).
Macros de teclado
start-kbd-macro (C-x ()
Empezar a grabar los caracteres tecleados, en la macro de
teclado en curso.
end-kbd-macro (C-x ))
Parar de grabar los caracteres tecleados en la macro de teclado
en curso, y almacenar la definición.
call-last-kbd-macro (C-x e)
Reejecutar la última macro de teclado definida, haciendo que los
caracteres en la macro aparezcan como si se hubieran pulsado en
el teclado.
Miscelánea
re-read-init-file (C-x C-r)
Leer los contenidos del fichero inputrc, e incorporar
cualesquiera definiciones de teclas o asignaciones de variables
que se hubieran encontrado en él.
abort (C-g)
Terminar abruptamente la orden de edición en curso y tocar el
pito de la terminal (según el establecimiento de bell-style).
do-uppercase-version (M-a, M-b, M-x, ...)
Si el carácter meta x está en minúscula, ejecutar la orden que
esté asociada al carácter correspondiente en mayúscula.
prefix-meta (ESC)
Convertir en meta el siguiente carácter tecleado. ESC f es
equivalente a Meta-f.
undo (C-_, C-x C-u)
Deshacer de forma incremental, recordado separadamente para cada
línea.
revert-line (M-r)
Deshacer todos los cambios hechos a esta línea. Esto es como
ejecutar la orden undo las veces suficientes como para devolver
la línea a su estado inicial.
tilde-expand (M-~)
Efectuar la expansión de tilde en la palabra en curso.
set-mark (C-@, M-<espacio>)
Establecer la marca en el punto actual. Si se da un argumento
numérico, la marca se establece en esa posición.
exchange-point-and-mark (C-x C-x)
Cambia el punto con la marca. La posición actual del cursor se
pone en la posición guardada, y la vieja posición del cursor se
guarda como la marca.
character-search (C-])
Se lee un carácter y el punto se mueve a la siguiente ocurrencia
de ese carácter. Un argumento numérico negativo hace que la
búsqueda sea de las ocurrencias anteriores.
character-search-backward (M-C-])
Se lee un carácter y el punto se mueve a la anterior ocurrencia
de ese carácter. Un argumento numérico negativo hace que la
búsqueda sea de las ocurrencias siguientes.
insert-comment (M-#)
El valor de la variable de readline comment-begin se inserta al
principio de la línea en curso, y la línea se acepta como si se
hubiera tecleado Intro (nueva-línea). Esto convierte la línea en
curso en un comentario del shell.
glob-expand-word (C-x *)
La palabra antes del punto se trata como un patrón para la
expansión de nombres de caminos y la lista de nombres de fichero
concordantes se inserta, reemplazando a la palabra.
glob-list-expansions (C-x g)
Mostrar la lista de expansiones que habrían sido generadas por
glob-expand-word y redibujar la línea.
dump-functions
Mostrar todas las funciones y sus asociaciones de teclas en el
flujo de salida de readline. Si se da un argumento numérico, la
salida se formatea de tal modo que pueda formar parte de un
fichero inputrc.
dump-variables
Mostrar todas las variables de readline a las que se puedan
asignar valores, y éstos, en el flujo de salida de readline. Si
se da un argumento numérico, la salida se formatea de tal manera
que pueda formar parte de un fichero inputrc.
dump-macros
Mostrar todas las secuencias de teclas de readline asociadas a
macros y las cadenas de caracteres asociadas correspondientes.
Si se da un argumento numérico, la salida se formatea de tal
manera que pueda formar parte de un fichero inputrc.
display-shell-version (C-x C-v)
Mostrar información de versión acerca de la instancia actual de
bash.
HISTORIA
Cuando se habilita la opción -o history de la orden interna set, el
shell da acceso a la historia de rdenes, la lista de órdenes tecleadas
con anterioridad. El texto de los últimos HISTSIZE mandatos (por
omisión, 500) se guarda en una lista de historia. El shell almacena
cada orden en la lista de historia antes de la expansión de parámetros
y variables (vea EXPANSIÓN arriba) pero tras efectuar la expansión de
historia, sujeta a los valores de las variables del shell HISTIGNORE e
HISTCONTROL. En el arranque, la historia se inicia a partir del
fichero nombrado en la variable HISTFILE (por omisión ~/.bash_history).
HISTFILE se trunca, si es necesario, para contener no más de
HISTFILESIZE líneas. Cuando un shell interactivo termina, las últimas
HISTSIZE líneas se copian de la lista de historia a HISTFILE. Si la
opción del shell histappend está activa (vea la descripción de shopt
bajo ÓRDENES INTERNAS DEL SHELL más adelante), las líneas se añaden al
fichero de historia; si no, el fichero de historia se sobreescribe. Si
HISTFILE no está definido, o si no se puede escribir en el fichero de
historia, la historia no se guarda. Tras guardar la historia, el
fichero de historia se trunca para contener no más de HISTFILESIZE
líneas. Si HISTFILESIZE no está definido, no se trunca.
La orden interna fc (vea ÓRDENES INTERNAS DEL SHELL abajo) puede
emplearse para listar o editar y re-ejecutar una porción de la lista de
historia. La orden interna history se puede utilizar para mostrar o
modificar la lista de historia y manipular el fichero de historia.
Cuando se emplea la edición de líneas de órdenes, están disponibles las
órdenes de búsqueda en cada modo de edición que proporcionan acceso a
la lista de historia.
El shell permite el control sobre qué órdenes se guarden en la lista de
historia. Las variables HISTCONTROL y HISTIGNORE se pueden definir de
forma que el shell guarde solamente un subconjunto de las órdenes
introducidas. La opción del shell cmdhist, si está habilitada, hace
que el shell intente guardar cada línea de una orden multi-línea en la
misma entrada de la historia, añadiendo punto y comas donde sea
necesario para preservar la corrección sintáctica. La opción del shell
lithist hace que el shell guarde la orden con saltos de línea
empotrados en vez de punto y comas. Vea la descripción de la orden
interna shopt abajo en ÓRDENES INTERNAS DEL SHELL para información
sobre cómo establecer y anular opciones del shell.
EXPANSIÓN DE HISTORIA
El shell admite una característica de expansión de historia que es
parecida a la expansión de historia en csh. Esta sección describe qué
características sintácticas están disponibles. Esta característica está
habilitada de forma predeterminada en shells interactivos, y puede ser
desactivada mediante la opción +H de la orden interna set (vea ÓRDENES
INTERNAS DEL SHELL abajo). Los shells no interactivos no realizan la
expansión de la historia de forma predeterminada.
Las expansiones de historia introducen palabras desde la lista de
historia en el flujo de entrada, facilitando así la repetición de
órdenes, la inserción de argumentos de una orden anterior en la línea
de entrada en curso, o la corrección rápida de errores en una orden
anterior.
La expansión de historia se realiza inmediatamente tras la lectura de
una línea completa, antes de que el shell la divida en palabras. Tiene
lugar en dos fases. En la primera se determina qué línea de la lista
de historia hay que emplear durante la sustitución. En la segunda se
seleccionan porciones de esa línea para su inclusión en la actual. La
línea seleccionada desde la historia es el evento, y la porción de esa
línea sobre la que se actúa son palabras. Se dispone de varios
modificadores para manipular las palabras seleccionadas. La línea se
divide en palabras de la misma manera que cuando se lee la entrada, de
forma que ciertas palabras separadas por meta-caracteres rodeadas por
comillas se consideran una sola palabra. Las expansiones de historia
se introducen por la aparición del carácter de expansión de historia,
que es por omisión !. Sólo las barras inversas (\) y las comillas
simples pueden proteger al carácter de expansión de historia.
Se pueden emplear ciertas opciones que se ponen con la orden interna
shopt para cambiar el comportamiento de la expansión de historia. Si
la opción del shell histverify está activa (vea la descripción de la
orden interna shopt), y se está usando readline, las sustituciones de
historia no se pasan inmediatamente al analizador del shell. En vez de
eso, la línea expandida se vuelve a cargar en el búfer de edición de
readline para una modificación posterior. Si se está usando readline y
la opción del shell histreedit está activada, una sustitución de
historia fallida se volverá a cargar en el búfer de edición de readline
para su corrección. La opción -p de la orden interna history se puede
emplear para ver qué hará una expansión de historia antes de usarse.
La opción -s de la orden interna history se puede emplear para añadir
órdenes al final de la lista de historia sin ejecutarlas realmente, de
modo que estén disponibles para rellamadas posteriores.
El shell permite el control de los diversos caracteres empleados por el
mecanismo de expansión de historia (vea la descripción de histchars
arriba en Variables del shell).
Designadores de eventos
Un designador de evento es una referencia a una entrada de línea de
orden en la lista de historia.
! Comenzar una sustitución de historia, excepto cuando le siga un
blanco, salto de línea, = o (.
!n Referirse a la línea de órdenes número n.
!-n Referirse a la línea de orden en curso menos n.
!! Referirse a la orden anterior. Esto es lo mismo que `!-1'.
!cadena
Referirse a la orden más reciente que comience con cadena.
!?cadena[?]
Referirse a la orden más reciente que contenga cadena. El ? del
final puede omitirse si a cadena le sigue inmediatamente un
salto de línea.
^cadena1^cadena2^
Sustitución rápida. Repetir la última orden, reemplazando
cadena1 con cadena2. Equivalente a ``!!:s/cadena1/cadena2/''
(vea Modificadores abajo).
!# La línea de orden entera tecleada hasta ahora.
Designadores de palabras
Los designadores de palabras se emplean para seleccionar las palabras
que se deseen del evento. Un : separa la especificación de evento del
designador de palabra. Puede omitirse si el designador de palabra
comienza con un ^, $, *, -, o %. Las palabras se numeran desde el
principio de la línea, con la primera palabra denotada por 0 (cero).
Las palabras se insertan en la línea en curso separadas por espacios
simples.
0 (cero)
La palabra número 0. Para el shell, ésta es la palabra de la
orden.
n La n-sima palabra.
^ El primer argumento. Esto es, la palabra número 1.
$ El último argumento.
% La palabra que concordaba con la más reciente búsqueda con
`?cadena?'.
x-y Un rango de palabras; `-y' abrevia `0-y'.
* Todas las palabras menos la número cero. Esto es un sinónimo de
`1-$'. No es un error emplear * si sólo hay una palabra en el
evento; en este caso se devuelve la cadena vacía.
x* Abreviatura de x-$.
x- Abrevia x-$ como x*, pero omite la última palabra.
Si se suministra un designador de palabra sin una especificación de
evento, se usa la orden anterior como el evento.
Modificadores
Tras el designador opcional de palabra, puede haber una secuencia de
uno o más de los siguientes modificadores, precedido cada uno por un
`:'.
h Quitar un componente final de nombre de fichero, dejando sólo la
parte izquierda.
t Quitar todos los primeros componentes de un nombre de fichero,
dejando la última parte.
r Quitar un sufijo final de la forma .xxx, dejando el nombre base.
e Quitar todo salvo el sufijo final.
p Mostrar la nueva orden pero no ejecutarla.
q Entrecomillar las palabras sustituidas, escapando de posteriores
sustituciones.
x Entrecomillar las palabras sustituidas como con q, pero romper
entre palabras en los blancos y saltos de línea.
s/viejo/nuevo/
Substituir nuevo por la primera ocurrencia de viejo en la línea
de evento. Se puede emplear cualquier delimitador en vez de /.
El delimitador final es opcional si es el último carácter de la
línea de evento. El delimitador puede entrecomillarse en viejo y
nuevo con una sola barra inclinada inversa. Si & aparece en
nuevo, se reemplaza por viejo. Una sola barra inversa protegerá
el &. Si viejo está vacío, se pone al último viejo substituido,
o, si no tuvo lugar ninguna sustitución de historia previa, a la
última cadena en una búsqueda del tipo !?cadena[?].
& Repetir la sustitución anterior.
g Hace que los cambios se apliquen sobre la línea entera de
evento. Esto se emplea en conjunción con `:s' (p.ej.,
`:gs/viejo/nuevo/') o `:&'. Si se usa con `:s', cualquier
delimitador se puede utilizar en lugar de /, y el delimitador
final es opcional si es el último carácter de la linea de
evento.
ÓRDENES INTERNAS DEL SHELL
A menos que se diga otra cosa, cada orden interna documentada en esta
sección que acepte opciones precedidas por - también acepta -- para
significar el final de las opciones.
: [argumentos]
Sin efecto; la orden no hace nada más que expandir argumentos y
realizar cualquier redirección que se haya especificado. Se
devuelve un código de salida cero.
. nombre-fichero [argumentos]
source nombre-fichero [argumentos]
Lee y ejecuta órdenes desde nombre-fichero en el entorno actual
del shell y devuelve el estado de salida de la última orden
ejecutada desde nombre-fichero. Si nombre-fichero no contiene
una barra inclinada, se usan los nombres de fichero en PATH para
encontrar el directorio que contenga a nombre-fichero. El
fichero que se busca en PATH no necesita ser ejecutable. Se
busca en el directorio de trabajo si no se encontró el fichero
en PATH. Si la opción sourcepath de la orden interna shopt está
desactivada, la búsqueda en PATH no se realiza. Si se
suministran argumentos, se convierten en los parámetros
posicionales cuando se ejecuta nombre-fichero. Si no, los
parámetros posicionales permanecen inalterados. El estado de
retorno es el de la última orden de dentro del guión (0 si no se
ejecutó ninguna orden), y `falso' si nombre-fichero no se
encontró o no se pudo leer.
alias [-p] [nombre[=valor] ...]
Alias sin argumentos o con la opción -p muestra la lista de
alias en la forma alias nombre=valor en la salida estándar.
Cuando se dan argumentos, se define un alias para cada nombre
cuyo valor se da. Un espacio extra tras valor hace que en la
siguiente palabra se realice la sustitución de alias cuando el
alias se expande. Para cada nombre en la lista de argumentos
para el que no se suministre un valor, se muestran el nombre y
el valor del alias. Alias devuelve `verdad' a menos que se dé
un nombre para el que no se haya definido un alias.
bg [espectrab]
Reanuda el trabajo suspendido espectrab en segundo plano, como
si se hubiera arrancado con &. Si espectrab no está presente,
se emplea la noción que tiene el shell del trabajo en curso. bg
espectrab devuelve 0 a menos que se ejecute cuando el control de
trabajos esté deshabilitado, o cuando se ejecute con el control
de trabajos habilitado si espectrab no se encontró, o cuando se
hubo arrancado sin control de trabajos.
bind [-m mapatecl] [-lpsvPSV]
bind [-m mapatecl] [-q funcin] [-u funcin] [-r sectecl]
bind [-m mapatecl] -f nombre-fichero
bind [-m mapatecl] sectecl:nombre-funcin
Muestra las asociaciones actuales de readline de teclas y
funciones, o asocia una secuencia de teclas a una función o
macro de readline. La sintaxis aceptada es idéntica a la de
.inputrc, pero cada asociación debe pasarse como un argumento
separado; p.ej., '"\C-x\C-r": re-read-init-file'. Las opciones,
si se dan, tienen los siguientes significados:
-m mapatecl
Usar mapatecl como el mapa de teclado que va a verse
afectado por subsiguientes asociaciones. Los nombres
aceptables de mapatecl son emacs, emacs-standard,
emacs-meta, emacs-ctlx, vi, vi-command y vi-insert. vi
equivale a vi-command; emacs es equivalente a
emacs-standard.
-l Lista los nombres de todas las funciones de readline.
-p Muestra los nombres de funciones de readline de tal forma
que puedan volver a ser leídas.
-P Lista los nombres de funciones de readline actuales y las
asociaciones.
-v Muestra los nombres de variables de readline y los
valores de tal manera que puedan volver a ser leídas.
-V Lista los nombres de variables de readline actuales y los
valores.
-s Muestra las secuencias de teclas de readline asociadas a
macros y las cadenas correspondientes de tal manera que
puedan ser leídas de nuevo.
-S Muestra las secuencias de teclas de readline asociadas a
macros y las cadenas de caracteres correspondientes.
-f nombre-fichero
Lee las asociaciones de teclas desde nombre-fichero.
-q funcin
Pregunta qué teclas llaman a la funcin especificada.
-u funcin
Desenlaza todas las teclas asociadas a la funcin
nombrada.
-r sectecl
Borra cualquier asociación actual de sectecl.
El valor devuelto es 0 a menos que se dé una opción no
reconocida o que ocurra un error.
break [n]
Sale de un bucle for, while, until, o select. Si se especifica
n, sale de n niveles. n debe ser ≥ 1. Si n es mayor que el
número de bucles, se sale de todos. El valor devuelto es 0 a
menos que el shell no esté ejecutando un bucle cuando se ejecute
break.
builtin orden-interna [argumentos]
Ejecuta la orden interna del shell especificada, pasándole los
argumentos, y devuelve su estado de salida. Esto es útil cuando
se define una función cuyo nombre es el mismo que una orden
interna del shell, reteniendo la funcionalidad de esa orden
interna dentro de la función. Por ejemplo, la orden interna cd
se puede redefinir normalmente de esta manera. El estado de
salida es `falso' si orden-interna no es una orden incorporada
del shell.
cd [-LP] [dir]
Cambia el directorio de trabajo en curso a dir. La variable
HOME contiene el nombre del directorio predeterminado dir. La
variable CDPATH define el camino de búsqueda del directorio que
contenga dir. Los nombres de directorios alternativos en CDPATH
se separan por dos puntos (:). Un nombre de directorio vacío en
CDPATH es lo mismo que el directorio de trabajo en curso, o sea,
``.''. Si dir comienza con una barra inclinada (/), entonces
CDPATH no se usa. La opción -P dice que se va a emplear la
estructura física de directorios en vez de seguir enlaces
simbólicos (vea también la opción -P de la orden interna set);
la opción -L hace que se sigan siempre los enlaces simbólicos.
El argumento - es equivalente a $OLDPWD. El valor de retorno es
`verdad' si el directorio de trabajo se cambió con éxito;
`falso' en otro caso.
command [-pVv] orden [arg ...]
Ejecuta orden con args suprimiendo la búsqueda normal de
funciones del shell. Sólo se ejecutarán órdenes incorporadas en
el shell o programas encontrados en la variable PATH. Si se da
la opción -p, se busca la orden empleándose un valor
predeterminado para PATH que garantiza encontrar todas las
utilidades estándar del sistema. Si se da la opción -V o la -v,
se muestra una descripción de orden. La opción -v muestra una
sola palabra que indica la orden o nombre de fichero ejecutable
empleado para la llamada a orden; la opción -V produce una
descripción algo más prolija. Si se dan las opciones -V o -v,
el estado de salida es 0 si orden se encontró, y 1 si no. Si no
se da ninguna de las dos opciones y ocurrió un error u orden no
se encontró, el estado de salida es 127. Si no, el estado de
salida de command es el estado de salida de orden.
continue [n]
Reanuda la siguiente iteración del bucle for, while, until, o
select donde estamos. Si se especifica n, la reanudación es en
el n-simo bucle que nos rodea. n debe ser ≥ 1. Si n es mayor
que el número de bucles que nos rodean, se reanuda el bucle más
exterior (el de ``más alto nivel''). El valor de retorno es 0 a
menos que el shell no esté ejecutando un bucle cuando se ejecute
continue.
declare [-afFirx] [-p] [nombre[=valor]]
typeset [-afFirx] [-p] [nombre[=valor]]
Declaran variables o les dan atributos. Si no se dan nombres,
entonces muestran los valores de las variables. La opción -p
mostrará los atributos y valores de cada nombre. Cuando se
emplee -p, otras opciones que se hayan dado no se tienen en
cuenta. La opción -F inhibe la presentación de las definiciones
de funciones; sólo se muestran sus nombres y atributos. La
opción -F implica -f. Se pueden emplear las siguientes opciones
para restringir la salida a variables con el atributo
especificado o para dar atributos a variables:
-a Cada nombre es una variable vector (vea Vectores arriba).
-f Usar solamente nombres de funciones.
-i La variable se trata como un entero; se realiza la
evaluación aritmética (vea EVALUACIÓN ARITMÉTICA) cuando
a la variable se le asigne un valor.
-r Hace que nombres sean de lectura exclusiva. A estos
nombres no se les pueden asignar valores por medio de
subsiguientes asignaciones, ni se puede anular su
definición con unset.
-x Marca nombres para la exportación a órdenes subsecuentes
a través del entorno.
Usar `+' en vez de `-' desactiva el atributo en vez de
activarlo, con la excepción de que no puede emplearse +a para
destruir una variable vector. Cuando se usa en una función, hace
local cada nombre, como con la orden interna local. El valor de
retorno es 0 a menos que se encuentre una opción inválida, se
intente definir una función utilizando "-f fuu=bar", se intente
asignar un valor a una variable de lectura exclusiva, se intente
asignar un valor a una variable vector sin emplear la sintaxis
de asignación compuesta (vea Vectores arriba), uno de los
nombres no sea un nombre válido de variable del shell, se
intente desactivar el estado de lectura exclusiva para una
variable de sólo lectura, se intente desactivar el estado de
vector para una variable vector, o se intente mostrar una
función no existente con -f.
dirs [-clpv] [+n] [-n]
Sin opciones, muestra la lista de directorios actualmente
recordados. La forma predeterminada de mostrarlos es en una
sola línea con los nombres de directorios separados por
espacios. Los directorios se añaden a la lista (en realidad,
una pila) con la orden pushd; la orden popd los quita de la
pila.
+n Muestra la n-sima entrada contando desde la izquierda de
la lista mostrada por dirs cuando se llama sin opciones,
empezando por cero.
-n Muestra la n-sima entrada contando desde la derecha de la
lista mostrada por dirs cuando se llama sin opciones,
empezando por cero.
-c Limpia la pila de directorios borrando todas las
entradas.
-l Produce un listado más largo; el formato predeterminado
de listado emplea una tilde de la eñe para señalar el
directorio inicial de trabajo (el "hogar").
-p Muestra la pila de directorios con una entrada por cada
línea.
-v Muestra la pila de directorios con una entrada por línea,
prefijando cada entrada con su índice en la pila.
El valor de retorno es 0 a menos que se dé una opción inválida o
que n indexe más allá del final de la pila de directorios.
disown [-ar] [-h] [espectrab ...]
Sin opciones, cada espectrab se quita de la tabla de trabajos
activos. Si se da la opción -h, cada espectrab no se quita de
la tabla, sino que se marca de manera que no se le enviará la
señal SIGHUP si el shell recibe una señal SIGHUP. Si no hay
ningún espectrab presente, y ni se dan las opciones -a ni -r, se
utiliza el trabajo en curso. Si no se suministra espectrab, la
opción -a significa quitar o marcar todos los trabajos; la
opción -r sin un argumento espectrab restringe la operación a
los trabajos en ejecución. El valor de retorno es 0 a menos que
espectrab no se refiera a un trabajo válido.
echo [-neE] [arg ...]
Repite los args, separados por espacios, seguidos por un salto
de línea. El estado de retorno es siempre 0. Si se especifica
-n, se suprime el salto de línea final. Si se da la opción -e,
se activa la interpretación de los siguientes caracteres de
escape (con barra inversa). La opción -E desactiva la
interpretación de estos caracteres de escape, incluso en
sistemas donde se interpreten de forma predeterminada. echo no
interpreta -- como el fin de las opciones. echo interpreta las
siguientes secuencias de escape:
\a alerta (pito)
\b espacio atrás
\c suprime el salto de línea final
\e un carácter Escape
\f salto de página
\n nueva línea
\r retorno de carro
\t tabulador horizontal
\v tabulador vertical
\\ barra inclinada invertida
\nnn el carácter cuyo código es el valor octal nnn (de uno a
tres dígitos)
\xnnn el carácter cuyo código es el valor hexadecimal nnn (de
uno a tres dígitos)
enable [-adnps] [-f nombre-fichero] [nombre ...]
Activa y desactiva órdenes internas incorporadas en el shell.
Desactivar una orden incorporada en el shell permite que un
programa cuya imagen ejecutable esté en el disco con el mismo
nombre, se ejecute sin tener que especificar un camino completo,
aun cuando el shell normalmente busca las órdenes internas antes
que las órdenes externas en disco. Si se da -n, cada nombre se
desactiva; si no, nombres se activan. Por ejemplo, para emplear
el programa binario test encontrado en el PATH en vez de la
versión incorporada en el shell, ejecute enable -n test. La
opción -f significa cargar la nueva orden incorporada nombre
desde el objeto compartido nombre-fichero, en sistemas que
admiten la carga dinámica. La opción -d borrará una orden
interna cargada previamente con -f. Si no se dan argumentos
nombre, o si se da la opción -p, se muestra una lista de órdenes
internas del shell. Sin ninguna opción más, la lista consiste
en todas las órdenes internas activas. Si se da -n, sólo se
muestran las órdenes desactivadas. Si se da -a, la lista
impresa incluye todas las órdenes internas, con una indicación
en cada una de si está activada o no. Si se da -s, la salida se
restringe a las órdenes internas especiales de POSIX. El valor
de retorno es 0 a menos que un nombre no sea una orden interna
del shell o que haya un problema cargando una nueva orden
incorporada desde un objeto compartido.
eval [arg ...]
Los args se leen y concatenan juntos para formar una sola orden.
Entonces el shell lee y ejecuta esta orden, y su estado de
salida se devuelve como el valor de eval. Si no hay args, o
solamente argumentos vacíos, eval devuelve 0.
exec [-cl] [-a nombre] [orden [argumentos]]
Si se especifica orden, reemplaza al shell. No se crea ningún
proceso nuevo. Los argumentos se convierten en los argumentos de
orden. Si se da la opción -l, el shell pone un guión en el
argumento número cero pasado a orden. Esto es lo que hace
login(1). La opción -c hace que orden se ejecute con un entorno
vacío. Si se da -a , el shell pasa nombre como el argumento
número cero de la orden ejecutada. Si orden no puede ejecutarse
por alguna razón, un shell no interactivo se acaba, a menos que
se haya activado la opción del shell execfail, en cuyo caso
devuelve `fallo'. Un shell interactivo devuelve `fallo' si el
fichero no puede ejecutarse. Si orden no se especifica,
cualquier redirección tiene efecto en el shell en curso, y el
estado devuelto es 0. Si hay un error de redirección, el estado
de retorno es 1.
exit [n]
Hace que el shell acabe con un estado de valor n. Si n se omite,
el valor de salida es el de la última orden ejecutada. Se
ejecuta una trampa puesta en EXIT antes de que el shell termine.
export [-fn] [nombre[=palabra]] ...
export -p
Los nombres suministrados se marcan para exportación automática
al entorno de órdenes que se ejecuten de ahí en adelante. Si la
opción -f se da, los nombres se referirán a funciones. Si no se
dan nombres, o si se da la opción -p, se muestra una lista de
todos los nombres que están exportados en este shell. La opción
-n hace que la propiedad de exportación se quite de las
variables nombradas; o sea, que se quiten del entorno. export
devuelve un estado de salida de 0 a menos que se encuentre una
opción inválida, uno de los nombres no sea un nombre válido de
variable del shell, o que se dé -f no siendo nombre una función.
fc [-e editor] [-nlr] [primero] [ltimo]
fc -s [pat=rep] [ord]
Corrige orden (Fix Command). En la primera forma, se selecciona
un rango de órdenes desde primero hasta ltimo de la lista de
historia. Primero y ltimo pueden especificarse como una cadena
de caracteres (para localizar la última orden que empezara con
esa cadena) o como un número (un índice en la lista de historia,
donde un número negativo se emplea como un desplazamiento a
partir del número de orden actual). Si no se da ltimo, se pone
a la orden en curso para un listado (de forma que fc -l -10
muestra las 10 últimas órdenes) o a primero en otro caso. Si no
se especifica primero, se pone a la orden previa para una
edición y a -16 para un listado.
La opción -n suprime los números de orden en un listado. La
opción -r invierte el orden de los mandatos. Si se da la opción
-l , las órdenes se listan en la salida estándar. Si no, se
llama al editor dado por editor en un fichero conteniendo esas
órdenes. Si no se da editor, se emplea el valor de la variable
FCEDIT, o el valor de EDITOR si FCEDIT no está definido. Si no
está definida ni una variable ni otra, vi es el editor que se
empleará. Cuando la edición se haya completado, las órdenes
editadas se muestran y ejecutan.
En la segunda forma, orden se re-ejecuta tras que cada instancia
de pat se reemplace por rep. Un alias de utilidad para emplear
con esto es ``r=fc -s'', de tal modo que al teclear ``r cc'' se
ejecute la última orden que empezara con ``cc'' y que al teclear
``r'' se re-ejecute la última orden.
Si se usa la primera forma, el valor de retorno es 0 a menos que
se encuentre una opción inválida o que primero o ltimo
especifiquen líneas de historia fuera de rango. Si se
suministra la opción -e, el valor de retorno es el de la última
orden ejecutada, o `fallo' si ocurre un error con el fichero
temporal de órdenes. Si se emplea la segunda forma, el estado de
retorno es de la orden reejecutada, a menos que ord no
especifique una línea válida de historia, en cuyo caso fc
devuelve `fallo'.
fg [espectrab]
Reanuda espectrab en primer plano, y lo hace ser el trabajo en
curso. Si espectrab no está presente, se usa la noción que
tiene el shell del trabajo en curso. El valor de retorno es el
de la orden puesta en primer plano, o `fallo' si se ejecuta fg
cuando el control de trabajos está desactivado o, cuando se
ejecuta con el control de trabajos activado, si espectrab no
especifica un trabajo válido o espectrab se refiere a una
trabajo que se arrancó sin control de trabajos.
getopts cadenaopcs nombre [args]
getopts se usa en procedimientos del shell para analizar los
parámetros posicionales. cadenaopcs contiene las letras de
opción que se reconocerán; si a una letra le sigue un signo de
dos puntos, se espera que la opción tenga un argumento, que
debería estar separado de ella por espacio en blanco. Cada vez
que se llama, getopts pone la siguiente opción en la variable
del shell nombre, inicializando nombre si no existe, y el índice
del siguiente argumento a ser procesado en la variable OPTIND.
OPTIND se inicializa a 1 cada vez que se llama al shell o al
guión del shell. Cuando una opción requiera un argumento,
getopts pone ese argumento en la variable OPTARG. El shell no
pone a cero OPTIND automáticamente; debe ser puesto a cero
manualmente entre llamadas múltiples a getopts dentro de la
misma llamada al shell si hubiera que usar un nuevo conjunto de
parámetros.
Cuando se encuentra el fin de las opciones, getopts sale con un
valor de retorno mayor que cero. OPTIND se pone al índice del
primer argumento que no es una opción, y nombre se pone a "?".
getopts normalmente analiza los parámetros posicionales, pero si
se dan más argumentos en args, getopts analiza aquéllos en su
lugar.
getopts puede informar de errores de dos maneras. Si el primer
carácter de optstring es dos puntos, se emplea un informe de
error silencioso. En un modo normal de operación se muestran
mensajes de diagnósticos cuando se encuentran opciones inválidas
o faltan argumentos de opciones que los requieran. Si la
variable OPTERR se pone a 0, no se mostrará ningún mensaje de
error, incluso si el primer carácter de optstring no es dos
puntos.
Si se ve una opción inválida, getopts pone ? en nombre y, si no
estamos en el modo silencioso, se muestra un mensaje de error y
se anula OPTARG. Si getopts es silencioso, el carácter de
opción encontrado se pone en OPTARG y no se muestra ningún
mensaje de diagnóstico.
Si no se encuentra un argumento necesario, y getopts no es
silencioso, se pone un signo de cierre de interrogación (?) en
nombre, OPTARG se anula, y se muestra un mensaje de diagnóstico.
Si getopts es silencioso, entonces se pone un signo de dos
puntos (:) en nombre y OPTARG toma el valor del carácter de
opción encontrado.
getopts devuelve `verdad' si una opción, especificada o no, se
encuentra. Devuelve `falso' si se encuentra el final de las
opciones o si ocurre un error.
hash [-r] [-p nombre-fichero] [nombre]
Para cada nombre, se determina el nombre completo del fichero
correspondiente buscando los directorios en $PATH y dicho nombre
completo se registra. Si se da la opción -p no se busca en el
PATH, y se emplea en su lugar nombre-fichero como el nombre
completo de fichero para la orden. La opción -r hace que el
shell se olvide de todas las localizaciones registradas. Si no
se dan argumentos, se muestra información acerca de las órdenes
recordadas. El estado de salida es `verdad' a menos que un
nombre no se encuentre o se dé una opción inválida.
help [patrn]
Muestra información de ayuda sobre las órdenes internas. Si se
especifica patrn, help da ayuda detallada sobre todas las
órdenes que concuerden con patrn; si no, se muestra ayuda para
todas las órdenes internas y estructuras de control del shell.
El estado de retorno es 0 a menos que ninguna orden concuerde
con patrn.
history [-c] [n]
history -anrw [nombre-fichero]
history -p arg [arg ...]
history -s arg [arg ...]
Sin opciones, muestra la lista de historia de órdenes con
números de línea. Las líneas marcadas con un * han sido
modificadas. Un argumento de n lista solamente las últimas n
líneas. Si nombre-fichero se da, se emplea como el nombre del
fichero de historia; si no, se usa el valor de HISTFILE. Las
opciones, si se dan, tienen los siguientes significados:
-a Añade las líneas de historia ``nuevas'' (las introducidas
desde el inicio de la sesión de bash en curso) al fichero
de historia.
-n Lee las líneas de historia que aún no han sido leídas del
fichero de historia y las mete en la lista de historia
actual. Éstas son las líneas añadidas al fichero de
historia desde el comienzo de la sesión de bash actual.
-r Lee los contenidos del fichero de historia y los usa como
la historia en curso.
-w Escribe la historia en curso en el fichero de historia,
sobreescribiendo sus contenidos.
-c Limpia la lista de historia borrando todas las entradas.
-p Realiza la sustitución de historia de los siguientes args
y muestra el resultado en la salida estándar. No
almacena los resultados en el fichero de historia. Cada
arg debe protegerse para deshabilitar la expansión de
historia normal.
-s Almacena los args en la lista de historia como una sola
entrada. La última orden en la lista de historia se
elimina antes de que se añadan los args.
El valor de retorno es 0 a menos que se encuentre una opción
inválida o que ocurra un error mientras se lee o se escribe el
fichero de historia.
jobs [-lnprs] [ espectrab ... ]
jobs -x orden [ args ... ]
La primera forma lista los trabajos activos. Las opciones tienen
los significados siguientes:
-l Lista PIDs además de la información normal.
-p Lista solamente el PID del líder del grupo de proceso del
trabajo.
-n Muestra información solamente sobre trabajos que han
cambiado de estado desde que se notificó al usuario por
última vez de su estado.
-r Restringe la salida a los trabajos en ejecución.
-s Restringe la salida a los trabajos parados.
Si se da espectrab, la salida se restringe a la información
sobre ese trabajo. El estado de retorno es cero a menos que se
encuentre una opción inválida o se suministre un espectrab
inválido.
Si se da la opción -x, jobs reemplaza cualquier espectrab
encontrado en orden o args con el ID de grupo de proceso
correspondiente, y ejecuta orden pasándole args, devolviendo su
estado de salida.
kill [-s nombre-seal | -n numseal | -nombre-seal] [pid | espectrab]
...
kill -l [nombre-seal | status_salida]
Envía la señal especificada por nombre-seal o numseal a los
procesos nombrados por pid o espectrab. nombre-seal es o bien
un nombre de señal como SIGKILL o un número de señal; numseal
es un número de señal. Si nombre-seal es un nombre de señal,
éste puede darse con o sin el prefijo SIG. Si nombre-seal no
está presente, entonces se supone SIGTERM. Un argumento de -l
lista los nombres de señales. Si se suministran más argumentos
cuando se da -l, se listan los nombres de las señales
correspondientes a los argumentos, y el estado de retorno es 0.
El argumento status_salida de -l es un número que especifica o
bien un número de señal o el estado de salida de un proceso
terminado por una señal. kill devuelve ``verdad'' si por lo
menos se envió con éxito una señal, o ``falso'' si ocurrió un
error o se encontró una opción inválida.
let arg [arg ...]
Cada arg es una expresión aritmética a ser evaluada (vea
EVALUACIÓN ARITMÉTICA). Si el último arg se evalúa a 0, let
devuelve 1; si no, devuelve 0.
local [nombre[=valor] ...]
Para cada argumento, se crea una variable local llamada nombre,
y se le asigna el valor valor. Cuando local se emplea dentro de
una función, hace que la variable nombre tenga una visibilidad
restringida a esa función y sus hijas. Sin operandos, local
escribe en la salida estándar una lista de las variables
locales. Es un error emplear local fuera de una función. El
estado de retorno es 0 a menos que local se use fuera de una
función, o se dé un nombre inválido.
logout Hace terminar un shell de entrada.
popd [-n] [+n] [-n]
Quita entradas de la pila de directorios. Sin argumentos,
desapila el directorio de la cima de la pila, y realiza un cd al
nuevo directorio de la pila. Los argumentos, si se suministran,
tienen los siguientes significados:
+n Quita la n-sima entrada contando desde la izquierda de la
lista mostrada por dirs, empezando por cero. Por ejemplo:
``popd +0'' quita el primer directorio, ``popd +1'' el
segundo.
-n Quita la n-sima entrada contando desde la derecha de la
lista mostrada por dirs, empezando por cero. Por ejemplo:
``popd -0'' quita el último directorio, ``popd -1'' el
penúltimo.
-n Suprime el normal cambio de directorio cuando se
desapilan directorios, de forma que solamente la pila se
manipula.
Si la orden popd es exitosa, también se realiza un dirs, y el
estado de retorno es 0. popd devuelve `falso' si se encuentra
una opción inválida, la pila de directorios está vacía, se
especifica una entrada de la pila de directorios no existente, o
falla el cambio de directorio.
printf formato [argumentos]
Escribe los argumentos formateados en la salida estándar bajo el
control del formato. El formato es una cadena de caracteres que
contiene tres tipos de objetos: caracteres normales, que
simplemente se copian en la salida estándar, caracteres de
secuencias de escape, que se convierten y copian en la salida
estándar, y especificaciones de formato, cada una de las cuales
causa la impresión del siguiente argumento sucesivo de una
determinada manera. Además de los formatos estándares normales
de printf(1), %b hace que printf expanda las secuencias de
escape de barras inversas en el correspondiente argumento, y %q
causa que printf muestre en la salida el argumento
correspondiente en un formato tal que pueda ser reutilizado como
entrada para el shell.
El formato se reutiliza tanto como sea necesario para consumir
todos los argumentos. Si el formato requiere más argumentos que
los que se suministran, las especificaciones de formato extra se
comportan como si se hubiera dado un valor cero o una cadena
vacía, según lo apropiado.
pushd [-n] [dir]
pushd [-n] [+n] [-n]
Añade un directorio a la cima de la pila de directorios, o rota
la pila, haciendo que el directorio de trabajo en curso sea la
nueva cima de la pila. Sin argumentos, intercambia los dos
directorios de más arriba y devuelve 0, a menos que la pila de
directorios esté vacía. Los argumentos, si se suministran,
tienen los siguientes significados:
+n Rota la pila de forma que el n-simo directorio (contando
desde la izquierda de la lista mostrada por dirs,
empezando por cero) esté en la cima.
-n Rota la pila de forma que el n-simo directorio (contando
desde la derecha de la lista mostrada por dirs, empezando
por cero) esté en la cima.
-n Suprime el cambio normal de directorio cuando se añaden
directorios a la pila, de forma que solamente se manipula
la pila.
dir Añade dir a la pila de directorios en la cima, haciéndolo
el nuevo directorio de trabajo.
Si la orden pushd acaba con éxito, se realiza un dirs también.
Si se emplea la primera forma, pushd devuelve 0 a menos que
falle el cambio a dir. Con la segunda forma, pushd devuelve 0 a
menos que la pila de directorios esté vacía, que se especifique
un elemento de la pila de directorios inexistente, o que el
cambio de directorio falle.
pwd [-LP]
Muestra el nombre de fichero absoluto del directorio de trabajo
en curso. El nombre de fichero mostrado no contiene enlaces
simbólicos si se da la opción -P o está puesta la opción -o
physical de la orden interna set. Si se usa la opción -L, los
enlaces simbólicos se siguen. El estado de retorno es 0 a menos
que ocurra un error mientras se lea el nombre del directorio
actual o se dé una opción inválida.
read [-er] [-a array] [-p prompt] [nombre ...]
Se lee una línea desde la entrada estándar, y la primera palabra
se asigna al primer nombre, la segunda palabra al segundo
nombre, y así sucesivamente, con las palabras que sobren y sus
separadores intervinientes asignadas al último nombre. Si hay
menos palabras leídas de la entrada estándar que nombres, a los
sobrantes se les asignan valores vacíos. Se emplean los
caracteres en IFS para dividir la línea en palabras. Las
opciones, si se dan, tienen los siguientes significados:
-r Un par formado por una barra inclinada inversa y un salto
de línea a continuación sí es tenido en cuenta, y la
barra inversa se considera parte de la línea.
-p Muestra prompt, sin un salto de línea al final, antes de
intentar leer nada de la entrada. El indicador se muestra
solamente si la entrada viene de una terminal.
-a Las palabras se asignan secuencialmente a los elementos
de la variable vector array, empezando por 0. Se anula
la posible previa definición de array antes de que se
asignen nuevos valores. Otros argumentos nombre no se
tienen en consideración.
-e Si la entrada estándar viene de una terminal, se emplea
readline (vea READLINE arriba) para obtener la línea.
Si no se suministran nombres, la línea leída se asigna a la
variable REPLY. El código de retorno es cero, a menos que se
llegue al fin de la entrada.
readonly [-apf] [nombre ...]
Los nombres dados se marcan como de lectura exclusiva; los
valores de estos nombres no pueden cambiarse por posteriores
asignaciones. Si se da la opción -f, se marcan así las
funciones correspondientes a los nombres. La opción -a
restringe las variables a vectores. Si no se da ningún
argumento nombre, o si se da la opción -p, se muestra una lista
de todos los nombres de lectura exclusiva. La opción -p hace
que la salida se muestre en un formato que puede ser reutilizado
como entrada. El estado de retorno es 0 a menos que se encuentre
una opción inválida, uno de los nombres no sea un nombre válido
de variable del shell, o se dé -f con un nombre que no es una
función.
return [n]
Hace que una función acabe y devuelva el valor especificado por
n. Si n se omite, el estado devuelto es el de la última orden
ejecutada en el cuerpo de la función. Si se emplea fuera de una
función, pero durante la ejecución de un guión por la orden .
(source), hace que el shell pare la ejecución de ese guión y
devuelva o n o el estado de salida de la última orden ejecutada
dentro del guión como el estado de salida del guión. Si se
emplea fuera de una función y no durante la ejecución de un
guión por ., el estado de salida es `falso'.
set [--abefhkmnptuvxBCHP] [-o opcin] [arg ...]
Sin opciones, se muestra el nombre y valor de cada variable del
shell en un formato que puede ser reutilizado como entrada. La
salida se clasifica según la localización en curso. Cuando se
dan opciones, se establecen o quitan atributos del shell.
Cualesquier argumentos que queden tras que se procesen las
opciones se tratan como valores para los parámetros posicionales
y se asignan, en orden, a $1, $2, ... $n. Las opciones, si se
especifican, tienen los siguientes significados:
-a Automáticamente marca variables, que se modifiquen o
creen, para exportación al entorno de las órdenes
subsiguientes.
-b Informa del estado de los trabajos en segundo plano
terminados inmediatamente, en vez de esperar a justo
antes de mostrar el siguiente indicador primario. Esto
sólo es efectivo cuando el control de trabajos está
habilitado.
-e Sale inmediatamente si una orden simple (vea GRAMÁTICA
DEL SHELL arriba) acaba con un estado distinto de cero.
El shell no acaba si la orden que falle es parte de un
bucle until o while, parte de una sentencia if, parte de
una lista && o ⎪⎪, o si el valor devuelto por la orden
se invierte mediante !.
-f Deshabilita la expansión de nombres de caminos.
-h Recuerda la localización de órdenes una vez que se
buscan para la 1ª ejecución. Esto está habilitado de
forma predeterminada.
-k Todos los argumentos en forma de sentencias de
asignación se ponen en el entorno para una orden, no
solamente aquéllos que precedan al nombre de la orden.
-m Modo de monitor. Se habilita el control de trabajos.
Esta opción está puesta de forma predeterminada para
shells interactivos en sistemas que lo admitan (vea
CONTROL DE TRABAJOS arriba). Los procesos en segundo
plano se ejecutan en un grupo de proceso separado, y se
imprime cuando se completan una línea conteniendo su
estado de salida.
-n Lee órdenes pero no las ejecuta. Esto puede emplearse
para comprobar si un guión del shell tiene errores de
sintaxis. Para shells interactivos esta opción no tiene
efecto.
-o nombre-opcin
El nombre-opcin puede ser uno de los siguientes:
allexport
Lo miso que -a.
braceexpand
Lo miso que -B.
emacs Emplea una interfaz de edición de líneas de
órdenes al estilo de emacs. Esto está activo de
forma predeterminada cuando el shell es
interactivo, a menos que se haya arrancado con
la opción --noediting.
errexit Lo mismo que -e.
hashall Lo mismo que -h.
histexpand
Lo mismo que -H.
history Habilita la historia de órdenes, según se
describió arriba bajo HISTORIA. Esta opción
está habilitada por omisión en shells
interactivos.
ignoreeof
El efecto es como si se hubiera ejecutado la
orden del shell IGNOREEOF=10 (vea Variables del
shell arriba).
keyword Lo mismo que -k.
monitor Lo mismo que -m.
noclobber
Lo mismo que -C.
noexec Lo mismo que -n.
noglob Lo mismo que -f.
notify Lo mismo que -b.
nounset Lo mismo que -u.
onecmd Lo mismo que -t.
physical
Lo mismo que -P.
posix Cambia el comportamiento de bash donde la
operación predeterminada difiera del estándar
POSIX 1003.2, de forma que se siga éste.
privileged
Lo mismo que -p.
verbose Lo mismo que -v.
vi Emplea una interfaz de edición de la línea de
órdenes al estilo de vi.
xtrace Lo mismo que -x.
Si se da -o sin ningún nombre-opcin, se muestran los
valores de las opciones activas. Si se da +o sin ningún
nombre-opcin, se muestra en la salida estándar una
serie de órdenes set para recrear las opciones según
están puestas o no actualmente.
-p Activa el modo privilegiado. En este modo, el fichero
correspondiente a $ENV no es procesado, las funciones
del shell no se heredan desde el entorno,y la variable
SHELLOPTS, si aparece en el entorno, no se tiene en
consideración. Esta opción se activa automáticamente en
el arranque si el identificador efectivo del usuario (o
grupo) no es igual al identificador real del usuario (o
grupo). Desactivar esta opción hace que los
identificadores efectivos de usuario y grupo se pongan
con los valores de los identificadores reales de usuario
y grupo respectivamente.
-t Sale tras leer y ejecutar una sola orden.
-u Trata las variables no definidas como un error cuando
realiza la expansión de parámetros. Si la expansión se
intenta hacer sobre una variable no definida, el shell
muestra un mensaje de error y, si no es interactivo,
sale con un estado distinto de cero.
-v Repite en la salida las líneas de entrada del shell tras
leerlas.
-x Tras expandir cada orden simple, muestra el valor
expandido de PS4, seguido por la orden y sus argumentos
expandidos.
-B El shell realiza la expansión de llaves (vea Expansión
de llaves arriba). Esto está activado de forma
predeterminada.
-C Si está activo, bash no sobreescribe un fichero
existente con los operadores de redirección >, >&, ni
<>. Esto puede cambiarse cuando se crean ficheros de
salida mediante el empleo del operador >| en vez de >.
-H Permite la sustitución de historia mediante !. Esta
opción está activada por omisión cuando el shell es
interactivo.
-P Si está activada, el shell no sigue enlaces simbólicos
cuando ejecuta órdenes como cd que cambian el directorio
de trabajo. En su lugar emplea la estructura de
directorio física. De forma predeterminada, bash sigue
la cadena lógica de directorios cuando ejecuta órdenes
que cambian el directorio de trabajo.
-- Si a esta opción no sigue ningún argumento más, entonces
los parámetros posicionales se anulan. Si no, los
parámetros posicionales se ponen con los valores dados
por los args, incluso si alguno de ellos comienza con un
-.
- Señala el final de las opciones, haciendo que el resto
de args se asignen a los parámetros posicionales. Las
opciones -x y -v se desactivan. Si no hay más args, los
parámetros posicionales permanecen sin cambios.
Las opciones están desactivadas de forma predeterminada a menos
que se diga otra cosa. Usar + en vez de - hace que estas
opciones se desactiven. Las opciones también pueden darse como
argumentos al llamar al shell. El conjunto de opciones
activadas puede examinarse en $-. El estado de retorno es
siempre `verdad' a menos que se encuentre una opción inválida.
shift [n]
Los parámetros posicionales desde n+1 ... se renombran a $1 ...
Los parámetros representados por los números desde $# hasta
$#-n+1 se anulan. n debe ser un número no negativo menor o
igual a $#. Si n es 0, no se cambia ningún parámetro. Si n no
se da, se supone 1. Si n es mayor que $#, los parámetros
posicionales no se cambian. El estado de retorno es mayor que
cero si n es mayor que $# o menor que cero; en otro caso es
cero.
shopt [-pqsu] [-o] [nombreopc ...]
Cambia los valores de variables que controlan un comportamiento
determinado opcional del shell. Sin opciones, o con la opción
-p, se muestra una lista de todas las opciones disponibles, con
una indicación en cada una de si está activa o no. La opción -p
hace que la salida se muestre de una forma tal que pueda
reutilizarse como entrada. Otras opciones tienen los
significados siguientes:
-s Activa (set) cada nombreopc.
-u Desactiva (unset) cada nombreopc.
-q Suprime la salida normal (modo silencioso); el estado de
salida indica si el nombreopc está activado o no. Si se
dan varios argumentos nombreopc con -q, el estado de
salida es cero si todos los nombreopcs están activados;
distinto de cero en otro caso.
-o Restringe los valores de nombreopc a aquéllos definidos
para la opción -o de la orden interna set.
Si se emplean -s o -u sin argumentos nombreopc, la lista
mostrada se limita a aquellas opciones que están activadas o
desactivadas, respectivamente. A menos que se diga otra cosa,
las opciones de shopt están inactivas (unset) de forma
predeterminada.
El estado de retorno cuando se listan opciones es cero si todos
los nombreopcs están activos, distinto de cero en otro caso.
Cuando se activan o desactivan opciones, el estado de salida es
cero a menos que un nombreopc no sea una opción del shell
válida.
La lista de las opciones de shopt es:
cdable_vars
Si está activa, un argumento de la orden interna cd que
no sea un directorio, se supone el nombre de una
variable cuyo valor es el directorio al que hay que
cambiarse.
cdspell Si está activa, se corregirán pequeños errores que
hubiera en la escritura de un componente directorio de
una orden cd. Los errores que se buscan se refieren a
caracteres transpuestos, un carácter que falte, y un
carácter que sobre. Si se encuentra una corrección, se
muestra el nombre de fichero corregido y la orden
procede. Esta opción sólo se emplea en shells
interactivos.
checkhash
Si está activa, bash comprueba que una orden encontrada
en la tabla de dispersión existe antes de intentar
ejecutarlo. Si una orden en la tabla de dispersión ya no
existe, se realiza una búsqueda normal en el PATH.
checkwinsize
Si está activa, bash comprueba el tamaño de ventana tras
cada orden y, si es necesario, actualiza los valores de
LINES y COLUMNS.
cmdhist Si está activa, bash intenta guardar todas las líneas de
una orden de varias líneas en la misma entrada de
historia. Esto permite una re-edición fácil de dichas
órdenes.
dotglob Si está activa, bash incluye los nombres de ficheros que
comiencen con un `.' en los resultados de la expansión
de nombres de caminos.
execfail
Si está activa, un shell no interactivo no acabará si no
puede ejecutar el fichero especificado como un argumento
de la orden interna exec. Un shell interactivo no acaba
si exec falla.
expand_aliases
Si está activa, los alias se expanden como se describió
arriba bajo ALIAS. Esta opción está habilitada de forma
predeterminada para shells interactivos.
extglob Si está activa, se habilitan las características de
concordancia de patrones extendidas descritas más arriba
en Expansión de nombres de camino.
histappend
Si está activa, la lista de historia se añade al fichero
nombrado según el valor de la variable HISTFILE cuando
el shell acaba, en vez de sobreescribir el fichero.
histreedit
Si está activa, y readline se está utilizando, se le da
al usuario la oportunidad de re-editar la sustitución de
historia fallida.
histverify
Si está activa, y readline se está utilizando, los
resultados de la sustitución de historia no se pasan
inmediatamente al analizador del shell. En vez de eso,
la línea resultante se carga en el búfer de edición de
readline, permitiendo así una modificación posterior.
hostcomplete
Si está activa, y readline se está utilizando, bash
intentará terminar de escribir un nombre de computador
anfitrión cuando se esté completando una palabra que
contenga una @ (vea Terminación bajo READLINE arriba).
Esto está activado de forma predeterminada.
huponexit
Si está activa, bash enviará una señal SIGHUP a todos
los trabajos cuando un shell de entrada interactivo
finalice.
interactive_comments
Si está activa, permite a una palabra que empiece por #
hacer que esa palabra y todos los caracteres restantes
de esa línea no sean tenidos en cuenta en un shell
interactivo (vea COMENTARIOS arriba). Esta opción está
habilitada por omisión.
lithist Si está activa, y la opción cmdhist también lo está, las
órdenes multi-línea se guardan en la historia con saltos
de línea empotrados en vez de emplear como separador el
punto y coma, donde sea posible.
mailwarn
Si está activa, y a un fichero donde bash está buscando
correo nuevo se ha accedido desde la última vez que se
buscó, se muestra el mensaje ``The mail in mailfile has
been read'', o su equivalente en el idioma local, que en
español sería ``El correo en buzn ha sido leído''.
nocaseglob
Si está activa, bash busca concordancias de nombres de
ficheros sin importar mayúsculas o minúsculas cuando
realice la expansión de nombres de caminos (vea
Expansión de nombres de caminos arriba).
nullglob
Si está activa, bash permite que los patrones que no
concuerden con ningún fichero (vea Expansión de nombres
de caminos arriba) se expandan a una cadena vacía, en
vez de a sí mismos.
promptvars
Si está activa, las cadenas de caracteres que sirven de
indicadores están sujetas a expansión de variable y
parámetro tras ser expandidas como se describió en
INDICADORES arriba. Esta opción está activa de forma
predeterminada.
shift_verbose
Si está activa, la orden interna shift muestra un
mensaje de error cuando el número de shift excede al de
parámetros posicionales.
sourcepath
Si está activa, la orden interna source (.) emplea el
valor de PATH para buscar el directorio que contenga al
fichero suministrado como argumento. Esta opción está
activa por omisión.
suspend [-f]
Suspende la ejecución de este shell hasta que reciba una señal
SIGCONT. La opción -f dice que no hay que protestar si éste es
un shell de entrada; simplemente suspenderlo de todas formas. El
estado de retorno es 0 a menos que el shell sea de entrada y la
opción -f no se haya dado, o si el control de trabajos no está
habilitado.
test expr
[ expr ]
Devuelve un estado de 0 ó 1 dependiendo de la evaluación de la
expresión condicional expr. Cada operador y operando debe ser
un argumento separado. Las expresiones se componen de las
primarias descritas más arriba bajo EXPRESIONES CONDICIONALES.
Las expresiones se pueden combinar mediante los operadores
siguientes, listados en orden decreciente de precedencia.
! expr Verdad si expr es falsa.
( expr )
Devuelve el valor de expr. Esto puede emplearse para
cambiar la precedencia normal de los operadores.
expr1 -a expr2
Verdad si tanto expr1 como expr2 son verdad.
expr1 -o expr2
Verdad si uno al menos de expr1 o expr2 es verdad.
test y [ evalúan expresiones condicionales según un conjunto de
reglas basadas en el número de argumentos.
0 argumentos
La expresión es falsa.
1 argumento
La expresión es verdad si y sólo si el argumento no está
vacío.
2 argumentos
Si el primer argumento es !, la expresión es verdad si y
sólo si el segundo argumento es nulo. Si el primer
argumento es uno de los operadores condicionales monarios
listados arriba en EXPRESIONES CONDICIONALES, la
expresión es verdad si el test monario es verdad. Si el
primer argumento no es un operador condicional monario
válido, la expresión es falsa.
3 argumentos
Si el segundo argumento es uno de los operadores
condicionales binarios listados arriba en EXPRESIONES
CONDICIONALES, el resultado de la expresión es el
resultado del test binario empleando el primer y tercer
argumentos como operandos. Si el primer argumento es !,
el valor es la negación del test de dos argumentos
empleando el segundo y tercer argumentos. Si el primer
argumento es exactamente ( y el tercer argumento es
exactamente ), el resultado es el test de un argumento
del segundo argumento. De otro modo, la expresión es
falsa. Los operadores -a y -o se consideran como
operadores binarios en este caso.
4 argumentos
Si el primer argumento es !, el resultado es la negación
de la expresión de tres argumentos compuesta por los
argumentos restantes. De otra forma, la expresión se
analiza y evalúa de acuerdo con la precedencia utilizando
las reglas listadas arriba.
5 ó más argumentos
La expresión se analiza y evalúa de acuerdo con la
precedencia usando las reglas mencionadas arriba.
times Muestra los tiempos acumulados de usuario y sistema para el
shell y para procesos ejecutados desde él. El estado de retorno
es 0.
trap [-lp] [arg] [nombre-seal ...]
La orden arg va a leerse y ejecutarse cuando el shell reciba
la(s) señal(es) especificada(s) por nombre-seal. Si arg está
ausente o es -, todas las señales especificadas se reestablecen
a sus valores originales (los que tenían cuando se entró en el
shell). Si arg es la cadena vacía, la señal especificada por
cada nombre-seal no se tiene en cuenta por parte del shell y de
las órdenes que se llamen desde él. Si arg es -p entonces se
muestran las órdenes de las trampas asociadas con cada nombre-
seal. Si no se pasan argumentos o si sólo se da -p, trap
muestra la lista de órdenes asociadas con cada número de señal.
Cada nombre-seal es o bien un nombre de señal de los definidos
en <signal.h>, o un número de señal. Si un nombre-seal es EXIT
(0), la orden arg se ejecuta cuando se sale del shell. Si un
nombre-seal es DEBUG, la orden arg se ejecuta tras cada orden
simple (vea GRAMÁTICA DEL SHELL arriba). La opción -l hace que
el shell muestre una lista de nombres de señal y sus números
correspondientes. Las señales que no se tienen en cuenta ya
cuando se entra en el shell no pueden ser atrapadas ni
restablecidas. Las señales atrapadas se reestablecen a sus
valores originales en un proceso hijo cuando se crea. El estado
de retorno es `falso' si cualquier nombre-seal no es válido; de
otro modo, trap devuelve `verdad'.
type [-atp] nombre [nombre ...]
Sin opciones, indica cómo será interpretado cada nombre si se
usa como un nombre de orden. Si se emplea la opción -t, type
muestra una de las siguientes cadenas de caracteres: alias,
keyword, function, builtin, o file si nombre es respectivamente
un alias, una palabra reservada del shell, una función, una
orden interna incorporada en el shell, o un fichero ejecutable
de disco. Si el nombre no se encuentra, no se muestra nada, y
se devuelve un estado de salida de `falso'. Si se emplea la
opción -p, type devuelve o bien el nombre del fichero de disco
que se ejecutaría si se especificara nombre como un nombre de
orden, o bien nada si type -t nombre no devolviera file. Si una
orden está en la tabla de dispersión, -p muestra el valor de
dicha tabla, no necesariamente el fichero que aparezca primero
en PATH. Si se emplea la opción -a, type muestra todos los
sitios que contengan un ejecutable llamado nombre. Esto incluye
alias y funciones, si y sólo si la opción -p no se ha usado
también. La tabla de dispersión de las órdenes no se consulta
cuando se emplea -a. type devuelve `verdad' si cualquiera de
los argumentos se encuentra, `falso' si no se encuentra ninguno.
ulimit [-SHacdflmnpstuv [lmite]]
Proporciona control sobre los recursos disponibles para el shell
y para los procesos arrancados por él, en sistemas que permitan
tal control (Linux por ejemplo, y por supuesto). El valor de
lmite puede ser un número en la unidad especificada para el
recurso, o el valor unlimited, o sea, ilimitado. Las opciones
-H y -S especifican que el límite para el recurso dado va a ser
duro o blando. Un límite duro es aquél que no puede ser
aumentado una vez puesto; un límite blando puede incrementarse
hasta el valor dado por el límite duro. Si no se especifican ni
-H ni -S, se establecen ambos límites. Si lmite se omite, se
muestran los valores del límite blando del recurso, a menos que
se dé la opción -H. Cuando se especifica más de un recurso, se
imprime el nombre del límite y la unidad antes del valor. Otras
opciones se interpretan como sigue:
-a Se informa de todos los límites actuales
-c El tamaño máximo de ficheros de volcados de memoria
(core)
-d El tamaño máximo del segmento de datos de un proceso
-f El tamaño máximo de ficheros creados por el shell
-l El tamaño máximo que puede ser bloqueado en memoria
-m El tamaño del máximo conjunto residente (memoria)
-n EL número máximo de descriptores de ficheros abiertos (la
mayoría de sistemas no permiten establecer este valor)
-p El tamaño de una tubería en bloques de 512 B (esto puede
no estar establecido)
-s El tamaño máximo de pila
-t La máxima cantidad de tiempo de CPU en segundos
-u El número máximo de procesos disponibles para un solo
usuario
-v La máxima cantidad de memoria virtual disponible para el
shell
Si se da lmite, es el nuevo valor del recurso especificado (la
opción -a es sólo para mostrar los valores). Si no se da
ninguna opción, entonces se supone -f. Los valores están en
incrementos de 1024 B, excepto para -t, que está en segundos,
-p, que está en unidades de bloques de 512 B, y -n y -u, que son
valores adimensionales. El estado de retorno es 0 a menos que se
encuentre una opción inválida, se dé como lmite un argumento no
numérico distinto de unlimited, o bien ocurra un error mientras
se establece un nuevo límite.
umask [-p] [-S] [modo]
La máscara de creación de ficheros del usuario se establece a
modo. Si modo empieza con un dígito, se interpreta como un
número octal; si no, se interpreta como un modo simbólico
similar al aceptado por chmod(1). Si modo se omite, o si se da
la opción -S, se muestra el valor actual de la máscara. La
opción -S hace que la máscara se imprima en forma simbólica; la
salida predeterminada es como un número octal. Si se da la
opción -p y modo se omite, la salida es de tal forma que puede
reutilizarse como entrada. El estado de retorno es 0 si el modo
se cambió exitosamente o si no se dio el argumento modo, y
`falso' en otra circunstancia.
unalias [-a] [nombre ...]
Quita nombres de la lista de alias definidos. Si se da la opción
-a, se quitan todas las definiciones de alias. El estado de
salida es `verdad' a menos que un nombre dado no sea un alias
definido.
unset [-fv] [nombre ...]
Para cada nombre, borra la variable o función correspondiente.
Si no se dan opciones, o se da la opción -v, cada nombre se
refiere a una variable del shell. Las variables de lectura
exclusiva no pueden borrarse. Si se especifica -f, cada nombre
se refiere a una función del shell, y se borra la definición de
la función. Cada variable o función se quita del entorno pasado
a órdenes subsiguientes. Si se quita cualquiera de RANDOM,
SECONDS, LINENO, HISTCMD, o DIRSTACK, pierde su propiedad
especial, incluso aunque más adelante se vuelva a definir. El
estado de salida es `verdad' a menos que nombre no exista o sea
de lectura exclusiva.
wait [n]
Espera al proceso especificado y devuelve su estado de
terminación. n puede ser un identificador de proceso (PID) o
una especificación de trabajo; si se da una espec. de trabajo,
se espera a todos los procesos en la tubería de ese trabajo. Si
n no se da, se espera a todos los procesos hijos activos
actualmente, y el estado de retorno es cero. Si n especifica un
proceso o trabajo no existente, el estado de retorno es 127. De
otro modo, el estado de retorno es el estado de salida del
último proceso o trabajo al que se esperó.
SHELL RESTRINGIDA
Si bash se arranca con el nombre rbash, o se da la opción -r en la
llamada, el shell se convierte en restringido. Un shell restringido se
emplea para establecer un ambiente más controlado que el que el shell
estándar proporciona. Se comporta de forma idéntica a bash con la
excepción de que lo siguiente no está permitido o no se realiza:
· cambiar de directorio con cd
· establecer o anular los valores de SHELL o de PATH
· especificar nombres de órdenes que contengan /
· especificar un nombre de fichero que contenga al menos una /
como un argumento de la orden interna . (source)
· importar definiciones de funciones desde el entorno del shell en
el arranque
· analizar el valor de SHELLOPTS desde el entorno del shell en el
arranque
· redirigir la salida usando los operadores de redirección >, >|,
<>, >&, &>, y >>
· utilizar la orden interna exec para reemplazar el shell por otro
programa
· añadir o eliminar órdenes incorporadas con las opciones -f o -d
de la orden interna enable.
· dar la opción -p a la orden interna command.
· desactivar el modo restringido con set +r o set +o restricted.
Estas restricciones entran en vigor después de que se lean los ficheros
de arranque que hubiera.
Cuando se ejecuta una orden que resulta ser un guión del shell (vea
EJECUCIÓN DE ÓRDENES arriba), rbash desactiva todas las restricciones
en el shell lanzado para ejecutar el guión.
VÉASE TAMBIÉN
Bash Features (Características de Bash), Brian Fox & Chet Ramey
The Gnu Readline Library (La Biblioteca Readline de GNU), Brian Fox &
Chet Ramey
The Gnu History Library (La Biblioteca de Historia de GNU), Brian Fox &
Chet Ramey
Portable Operating System Interface (POSIX) Part 2: Shell and Utilities
(Interfaz para Sistemas Operativos Transportables (POSIX) Parte 2:
Shell y Utilidades), IEEE
zsh(1), ash(1), sh(1), ksh(1), csh(1), tcsh(1).
emacs(1), vi(1)
readline(3)
FICHEROS
/bin/bash
La imagen ejecutable de bash
/etc/profile
El fichero de inicio general, leído en shells de entrada
~/.bash_profile
El fichero de inicio personal, leído para shells de entrada
~/.bashrc
El fichero individual de arranque para shells interactivos
~/.inputrc
El fichero de inicio individual de readline
AUTORES
Brian Fox, Free Software Foundation
bfox@gnu.ai.MIT.Edu
Chet Ramey, Case Western Reserve University
chet@ins.CWRU.Edu
Traducción al español: Gerardo Aburruzaga García, para el proyecto
PAMELI.
Gerardo@CICA.es
INFORMES DE FALLOS
Si Ud. encuentra un fallo en bash, debería informar de ello. Pero
primero debería asegurarse de que realmente es un fallo, y de que
aparece en la última versión de bash que tenga.
Una vez que Ud. ha determinado que realmente existe un fallo, utilice
la orden bashbug para enviar el informe correspondiente. Si Ud. ha
encontrado cómo corregirlo, ¡se le anima a que nos mande también la
corrección! Las sugerencias y los informes de fallos `filosóficos' se
pueden enviar por correo electrónico a bug-bash@gnu.org o se pueden
publicar en el grupo de discusiones de Usenet gnu.bash.bug.
TODOS los informes de fallos deben incluir:
El número de versión de bash
El tipo de computador (hardware) y el sistema operativo
El compilador que se empleó para compilarlo
Una descripción del comportamiento del fallo
Un corto guión o `receta' para reproducir el fallo
bashbug inserta automáticamente los tres primeros puntos en la
plantilla que proporciona para escribir el informe del fallo.
Los comentarios e informes de fallos que conciernan a esta página de
manual deben dirigirse a chet@ins.CWRU.Edu.
Los relativos a la traducción de esta página deben dirigirse a
gerardo@cica.es o discutirse en el marco del proyecto PAMELI; contacte
con nosotros en http://elcano.dif.um.es/~piernas/manpages-es.
FALLOS
Es demasiado grande y demasiado lento.
Hay algunas sutiles diferencias entre bash y versiones tradicionales
del shell de Bourne sh, mayormente debidas a la especificación POSIX.
Los alias son confusos en algunos casos.
Las órdenes internas del shell y las funciones no son
interrumpibles/rearrancables.
Las órdenes compuestas y las secuencias de órdenes de la forma `a ; b ;
c' no se manejan de forma muy elegante cuando se intenta suspender el
proceso. Cuando un proceso es parado, el shell ejecuta inmediatamente
la siguiente orden de la secuencia. Para remediar esto es suficiente
poner la secuencia de órdenes entre paréntesis; así la forzamos a
ejecutarse en un subshell, que puede pararse como una unidad.
Las órdenes dentro de una sustitución de orden de tipo $(...) no se
analizan hasta que se intenta la sustitución. Esto provocará un retraso
en la aparición de mensajes posibles de error hasta algún tiempo
después de que se introduzca la orden.
Las variables de tipo vector no pueden (aún) exportarse.