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 (C) 1989, 1991, 1993, 1995, 1996 por la Free Software
Foundation, Inc.
DESCRIPCI'ON
Bash es un interprete de un lenguaje de ordenes compatible con sh que
ejecuta ordenes leidas desde la entrada estandar o desde un fichero.
Bash tambien incorpora caracteristicas utiles tomadas de los shells de
Korn y C (ksh y csh).
Bash esta pensado con la intencion de ser una implementacion conforme
con la especificacion POSIX de Shell y Herramientas, de la IEEE (Grupo
de Trabajo 1003.2 de la IEEE).
OPCIONES
Ademas de las opciones de un solo caracter documentadas en la
descripcion de la orden interna set, bash interpreta las siguientes
opciones cuando es llamado:
-c cadena Si la opcion -c esta presente, entonces las ordenes se leen
de cadena. Si hay argumentos tras la cadena, se asignan a
los parametros posicionales, empezando por $0.
-r Si la opcion -r esta presente, entonces el shell se vuelve
restringido (vea SHELL RESTRINGIDO mas abajo).
-i Si la opcion -i esta presente, el shell es interactivo.
-s Si la opcion -s esta presente, o si no quedan argumentos tras
el procesado de las opciones, entonces las ordenes se leen
desde la entrada estandar. Esta opcion permite definir los
parametros posicionales cuando se llama a un shell
interactivo.
-D Se muestra en la salida estandar una lista de cadenas de
caracteres entrecomilladas precedidas por $. Estas cadenas
son las que estan sujetas a traduccion cuando la localizacion
en curso no es C ni POSIX. Esta opcion implica tambien la
-n; no se ejecuta ninguna orden.
-- Un -- senala 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 tambien interpreta una variedad de opciones multi-caracter. Estas
opciones deben aparecer en la linea de ordenes antes de las opciones de
un solo caracter 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 estandar y
acaba con exito.
--login
Hace que bash actue como si se le hubiera llamado como un shell
de entrada (vea LLAMADA mas abajo).
--noediting
No utiliza la biblioteca de GNU readline para leer lineas de
ordenes 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 omision, bash lee estos
ficheros cuando se le llama como un shell de entrada (vea
LLAMADA mas adelante).
--norc No lee ni ejecuta el fichero de inicio personal ~/.bashrc si el
shell es interactivo. Esta opcion esta activa de forma
predeterminada si el shell se llama como sh.
--posix
Cambia el comportamiento de bash donde la operacion normal
difiera del estandar POSIX 1003.2, de forma que concuerde con
este.
--rcfile fichero
Ejecuta ordenes desde fichero en vez de desde el fichero de
inicio personal estandar ~/.bashrc si el shell es interactivo
(vea LLAMADA mas abajo).
--restricted
El shell se vuelve restringido (vea SHELL RESTRINGIDO mas
abajo).
--verbose
Equivale a -v.
--version
Muestra informacion en la salida estandar sobre la version de
esta instanciacion de bash y acaba con exito.
ARGUMENTOS
Si quedan argumentos tras el procesado de las opciones, y no se han
dado ni la opcion -c ni la -s, se supone que el primer argumento es el
nombre de un fichero que contiene ordenes del shell. Si bash se llama
de esta manera, $0 se define con el nombre del fichero, y los
parametros posicionales se definen con los restantes argumentos. Bash
lee y ejecuta ordenes de este fichero, luego acaba. El estado de
salida de bash es el de la ultima orden ejecutada en el guion. Si no
se ejecuta ninguna orden, el estado de salida es 0.
LLAMADA
Un shell de entrada es aquel cuyo primer caracter del argumento cero es
un -, o uno que ha sido llamado con la opcion --login.
Un shell interactivo es uno cuya entrada y salida estandares estan
conectadas a terminales (segun determina isatty(3)), o uno que ha sido
llamado con la opcion -i. Se define PS1 y $- incluye i si bash es
interactivo, permitiendo asi a un guion del shell o a un fichero de
arranque el comprobar este estado.
Los siguientes parrafos describen como 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 n se expanden en nombres de
ficheros como se describe mas abajo en Expansi'on de la tilde en la
seccion EXPANSI'ON.
Cuando bash se llama como un shell de entrada interactivo, primero lee
y ejecuta ordenes 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 ordenes del primero de ellos
que exista y se pueda leer. La opcion --noprofile puede emplearse
cuando se llame al shell para inhibir este comportamiento.
Cuando un shell de entrada termina, bash lee y ejecuta ordenes desde el
fichero ~/.bash_logout, si existe.
Cuando se arranca un shell interactivo que no es de entrada, bash lee y
ejecuta ordenes desde ~/.bashrc, si es que existe. Esto puede evitarse
mediante la opcion --norc. La opcion --rcfile fichero forzara a bash a
leer y ejecutar ordenes desde fichero en vez de ~/.bashrc.
Cuando bash se arranque de forma no interactiva, por ejemplo para
ejecutar un guion del shell, busca la variable BASH_ENV en el entorno,
expande su valor si esta 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 ordenes:
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 historicas de sh tanto como sea posible, pero sin
salirse del estandar POSIX. Cuando se llama como un shell interactivo
de entrada, primero intenta leer y ejecutar ordenes desde /etc/profile
y ~/.profile, en ese orden. La opcion --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 esta
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 ordenes desde cualquier otro fichero de arranque, la opcion
--rcfile no tiene efecto. Un shell no interactivo llamado con el
nombre sh no intenta leer ningun fichero de arranque. Cuando se llama
como sh, bash entra en modo posix despues de leer los ficheros de
arranque.
Cuando bash se arranca en modo posix, como ocurre cuando se da la
opcion de linea de ordenes --posix, sigue el estandar POSIX para los
ficheros de arranque. En este modo, los shells interactivos expanden
la variable ENV y se leen y ejecutan ordenes desde el fichero cuyo
nombre es el valor expandido de dicha variable. No se lee ningun otro
fichero de arranque.
Bash intenta determinar cuando esta siendo llamado por el demonio de
shell remoto, usualmente rshd. Si bash determina que esta siendo
ejecutado por rshd, lee y ejecuta ordenes desde ~/.bashrc, si tal
fichero existe y se puede leer. Esto no lo hara si se le llama con el
nombre sh. La opcion --norc puede emplearse para inhibir este
comportamiento, y la opcion --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 traves del resto de este
documento.
blanco Un espacio en blanco o tabulacion (tab).
palabra
Una secuencia de caracteres considerados por el shell como una
sola unidad. Tambien se conoce como un lexema (token).
nombre Una palabra que consiste solamente en caracteres alfanumericos y
subrayados, y comienza con un caracter alfabetico o un
subrayado. Tambien se llama identificador.
metacar'acter
Un caracter que, cuando no esta entrecomillado, separa palabras.
Uno de los siguientes:
| & ; ( ) < > espacio tab
operador de control
Un lexema que realiza una funcion de control. Es uno de los
siguientes simbolos:
|| & && ; ;; ( ) | <nueva-l'inea>
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'ATICA DEL SHELL mas 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'ATICA DEL SHELL
'Ordenes 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, o 128+n
si la orden ha terminado debido a la senal n.
Tuber'ias
Una tuber'ia es una secuencia de una o mas ordenes separadas por el
caracter |. El formato de una tuberia es:
[time [-p]] [ ! ] orden [ | orden2 ... ]
La salida estandar de orden se conecta a la entrada estandar de orden2.
Esta conexion se realiza antes que cualquier redireccion especificada
por la orden (vea REDIRECCI'ON mas abajo).
Si la palabra reservada ! precede una tuberia, el estado de salida de
esta es el NO logico del de la ultima orden. De otro modo, el estado de
la tuberia es el de salida de la ultima orden. El shell espera que
todas las ordenes de la tuberia terminen antes de devolver un valor.
Si la palabra reservada time precede una tuberia, se informa del tiempo
transcurrido, asi como del de usuario y sistema, consumido en la
ejecucion de la tuberia, cuando esta termina. La opcion -p cambia el
formato de salida al especificado por POSIX. La variable TIMEFORMAT
puede definirse como una cadena de caracteres de formato que
especifique como la informacion de tiempos deberia mostrarse; vea la
descripcion de TIMEFORMAT bajo Variables del Shell mas abajo.
Cada orden en una tuberia se ejecuta como un proceso separado (esto es,
en un subshell).
Listas
Una lista es una secuencia de una o mas tuberias separadas por uno de
los operadores ;, &, &&, o ||, y terminada opcionalmente por uno de ;,
&, o <nueva-l'inea>.
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 ordenes 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
ultima 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 solo si orden devuelve un estado de salida 0.
Una lista O tiene la forma
orden || orden2
orden2 se ejecuta si y solo si orden devuelve un estado de salida
distinto de cero. El estado de salida de las listas Y y O es el de la
ultima orden ejecutada en la lista.
'Ordenes compuestas
Una orden compuesta es una de las siguientes:
(lista)
lista se ejecuta en un subshell. Despues de que la orden se
completa, las asignaciones a variables y ordenes 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 linea o un punto y coma.
Esto se conoce como una orden de grupo. El estado de retorno es
el de salida de lista.
((expresi'on))
La expresi'on se evalua de acuerdo a las reglas descritas abajo
bajo la seccion EVALUACI'ON ARITM'ETICA. Si el valor de la
expresion 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 "expresi'on".
[[ expresi'on ]]
Devuelve un estado de 0 o 1 dependiendo de la evaluacion de la
expresion condicional expresi'on. Las expresiones se componen de
las primarias descritas adelante bajo EXPRESIONES CONDICIONALES.
No tienen lugar division de palabras ni expansion de nombres de
camino en las palabras entre el [[ y el ]]; si se realizan la
expansion de tilde, expansion de parametros y variables,
expansion aritmetica, sustitucion de orden, sustitucion de
proceso y eliminacion de comillas.
Cuando se emplean los operadores == y !=, la cadena a la derecha
del operador se considera un patron y se hace concordar de
acuerdo a las reglas descritas mas adelante bajo el epigrafe
Concordancia de patrones. El valor devuelto es 0 si la cadena
concuerda o no concuerda con el patron, respectivamente, y 1 en
otro caso. Cualquier parte del patron 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:
( expresi'on )
Devuelve el valor de expresi'on. Esto puede emplearse
para cambiar la precedencia normal de los operadores.
! expresi'on
Verdad si expresi'on es falsa.
expresi'on1 && expresi'on2
Verdad si ambas expresi'on1 y expresi'on2 son verdaderas.
expresi'on1 || expresi'on2
Verdad si una al menos de expresi'on1 o expresi'on2 es
verdad.
Los operadores && y || no ejecutan expresi'on2 si el valor de expresi'on1
es suficiente para determinar el valor de retorno de la expresion
condicional entera.
for nombre [ in palabra; ] do lista ; done
La lista de palabras que va detras de in se expande, generando
una lista de elementos. La variable nombre se define como cada
elemento de la lista en cada iteracion, y lista se ejecuta cada
vez. Si la palabra de in se omite, la orden for ejecuta lista
una vez para cada parametro posicional que este definido (vea
PAR'AMETROS mas abajo). El estado de retorno es el de salida de
la ultima orden que se ejecuta. Si la expansion de los
elementos despues del in resulta en una lista vacia, 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 estandar de errores, cada una precedida por
un numero. Si la palabra del in se omite, se muestran los
parametros posicionales (vea PAR'AMETROS mas abajo). Entonces se
muestra el indicador PS3 y se lee una linea desde la entrada
estandar. Si la linea consiste en un numero correspondiente a
una de las palabras mostradas, entonces el valor de nombre se
pone a esa palabra. Si la linea esta vacia, las palabras y el
indicador se muestran de nuevo. Si se lee EOF, la orden se
completa. Cualquier otro valor leida hace que nombre se ponga a
un valor vacio. La linea leida se guarda en la variable REPLY.
La lista se ejecuta tras cada seleccion hasta que se ejecute una
orden break o return. El estado de salida de select es el de la
ultima orden ejecutada en lista, o cero si no se ha ejecutado
ninguna orden.
case palabra in [ ( patr'on [ | patr'on ] ... ) lista ;; ] ... esac
Una orden case expande primero palabra, e intenta hacerla
concordar contra cada patr'on por turnos, empleando las mismas
reglas de concordancia que para la expansion de nombres de
caminos (vea Expansi'on de nombre de camino mas abajo). Cuando
se encuentre una concordancia, se ejecuta la lista
correspondiente. Tras la primera concordancia, no se intentan
mas. El estado de salida es cero si no concuerda ningun patron.
De otro modo, es el estado de salida de la ultima 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 esta presente. El estado de salida es
el de la ultima orden ejecutada, o cero si ninguna condicion fue
verdadera.
while lista; do lista; done
until lista; do lista; done
La orden while ejecuta continuamente la lista do siempre que la
ultima orden de lista devuelva un estado de salida cero. La
orden until es identica a la while, excepto en que la
comprobacion es al reves; la lista do se ejecuta mientras que la
ultima orden en lista devuelva un estado de salida distinto de
cero. El estado de salida de las ordenes while y until es el de
la ultima orden de la lista do ejecutada, o cero si no se
ejecuto ninguna orden.
[ function ] nombre () { lista; }
Esto define una funcion llamada nombre. El cuerpo de la funcion
es la lista de ordenes 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 funcion es el de la ultima orden
ejecutada en el cuerpo. (Vea FUNCIONES mas abajo.)
COMENTARIOS
En un shell no interactivo, o en uno interactivo en el que la opcion
interactive_comments de la orden interna shopt esta activa (vea 'ORDENES
INCORPORADAS DEL SHELL mas abajo), una palabra que empiece por # hace
que esa palabra y todos los caracteres que queden en esa linea no sean
tenidos en cuenta. Un shell interactivo sin la opcion
interactive_comments habilitada, no admite comentarios. La opcion
interactive_comments esta 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 expansion
de parametros.
Cada uno de los metacaracteres listados a continuacion bajo el epigrafe
DEFINICIONES tiene un significado especial para el shell y deben ser
protegidos o entrecomillados si quieren representarse a si mismos. Hay
3 mecanismos de proteccion: el car'acter de escape, comillas simples, y
comillas dobles.
Una barra inclinada inversa no entrecomillada (\) es el car'acter de
escape. Preserva el valor literal del siguiente caracter que lo
acompana, con la excepcion de <nueva-linea>. Si aparece un par
\<nueva-linea> y la barra invertida no esta ella misma entre comillas,
el \<nueva-linea> se trata como una continuacion de linea (esto es, se
quita del flujo de entrada y no se tiene efectivamente en cuenta).
Encerrar caracteres entre apostrofos preserva el valor literal de cada
caracter 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 excepcion de $,
`, y \. Los caracteres $ y ` mantienen sus significados especiales
dentro de comillas dobles. La barra invertida mantiene su significado
especial solamente cuando esta seguida por uno de los siguientes
caracteres: $, `, "", \, o <nueva-l'inea>. Una comilla doble puede ser
entrecomillada entre otras comillas dobles precediendola de una barra
invertida.
Los parametros especiales * y @ tienen un significado especial cuando
estan entre comillas dobles (vea PAR'AMETROS mas 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 segun especifica el estandar ANSI/ISO de C. Las
secuencias de escape con barra invertida, si estan presentes, se
descodifican como sigue:
\a alerta (campana)
\b espacio-atras
\e un caracter de escape (ESC)
\f nueva pagina
\n nueva linea
\r retorno de carro
\t tabulacion horizontal
\v tabulacion vertical
\\ barra invertida
\nnn el caracter cuyo codigo es el valor octal nnn (de uno a
tres digitos)
\xnnn el caracter cuyo codigo es el valor hexadecimal nnn
El resultado traducido es entrecomillado con comillas simples, como si
el signo de dolar no hubiera estado presente.
Una cadena entre comillas dobles precedida por un signo de dolar ($)
hara que la cadena se traduzca segun la localizacion en curso. Si esta
es C o POSIX, el signo de dolar no se tiene en cuenta. Si la cadena se
traduce y reemplaza, el reemplazo se entrecomilla con comillas dobles.
PAR'AMETROS
Un par'ametro es una entidad que almacena valores. Puede ser un nombre,
un numero, o uno de los caracteres especiales listados a continuacion
bajo el epigrafe Par'ametros especiales. En lo que se refiere al shell,
una variable es un parametro identificado por un nombre.
Un parametro esta definido si se le ha asignado un valor. La cadena
vacia es un valor valido. Una vez que una variable esta definida, solo
puede quitarse de la lista de variables mediante la orden interna unset
(vea 'ORDENES INTERNAS DEL SHELL mas 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 vacia. Todos
los valores estan sujetos a expansion de tilde, de parametros y
variables, de cadena, de orden, aritmetica, y eliminacion de comillas
(vea EXPANSI'ON mas abajo). Si la variable tiene activado su atributo
integer (vea declare mas abajo en 'ORDENES INTERNAS DEL SHELL) entonces
valor esta sujeto a expansion aritmetica incluso si no se emplea la
expansion $((...)) (vea Expansi'on aritm'etica mas adelante). No se
realiza la division de palabras, con la excepcion de "$@" como se
explica mas adelante bajo el epigrafe Par'ametros especiales. La
expansion de nombres de camino no se efectua.
Par'ametros posicionales
Un par'ametro posicional es un parametro denotado por uno o mas digitos,
distintos del simple 0. Los parametros posicionales se asignan a partir
de los argumentos del shell cuando este es llamado, y pueden ser
reasignados mediante la orden interna set. Los parametros posicionales
no pueden ser asignados con sentencias de asignacion. Los parametros
posicionales se reemplazan temporalmente cuando se ejecuta una funcion
del shell (vea FUNCIONES abajo).
Cuando un parametro posicional consistente en mas de un solo digito se
expande, debe rodearse por llaves (vea EXPANSI'ON abajo).
Par'ametros especiales
El shell trata de forma especial a ciertos parametros. Estos solo
pueden referenciarse; no se permite asignarles nada.
* Se expande a los parametros posicionales, empezando por 1.
Cuando la expansion ocurre entre comillas dobles, se expande a
una sola palabra con el valor de cada parametro separado por el
primer caracter de la variable especial IFS. Esto es, "$*" es
equivalente a "$1c$2c...", donde c es el primer caracter del
valor de la variable IFS. Si IFS no esta definida, los
parametros se separan por espacios. Si IFS es la cadena vacia,
los parametros se juntan sin ningun separador.
@ Se expande a los parametros posicionales, empezando desde 1.
Cuando la expansion ocurre dentro de comillas dobles, cada
parametro se expande a una palabra separada. Esto es, "$@" es
equivalente a "$1" "$2" ... Cuando no hay parametros
posicionales, "$@" y $@ se expanden a nada (esto es, se borran).
# Se expande al numero en base 10 de parametros posicionales.
? Se expande al estado de la tuberia mas recientemente ejecutada
en primer plano.
- Se expande a las opciones del shell activas actualmente segun se
hayan especificado en la llamada, mediante la orden interna set,
o las que haya puesto el mismo shell (como la opcion -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 mas recientemente ejecutada en
segundo plano (asincronamente).
0 Se expande al nombre del shell o guion del shell. Este parametro
se pone en el inicio del shell. Si bash se llama con un fichero
de ordenes, $0 se pone al nombre de ese fichero. Si bash se
arranca con la opcion -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 guion del shell que se esta ejecutando, tal como se
ha pasado en la lista de argumentos. Subsecuentemente, se
expande al ultimo argumento de la orden anterior, tras la
expansion. Tambien se pone al nombre completo del fichero de
cada orden ejecutada, y se pone en el entorno exportado a esa
orden. Cuando se esta comprobando si hay correo nuevo, este
parametro contiene el nombre del fichero de correo o buzon que
se esta comprobando actualmente.
Variables del shell
El shell pone automaticamente 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 linea de entrada leida 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 version de esta
instancia de bash.
BASH_VERSINFO
Una variable vector de lectura exclusiva cuyos miembros
contienen informacion de version para esta instancia de bash.
Los valores asignados a los miembros del vector son como sigue:
BASH_VERSINFO[0] El numero mayor de version (la
distribuci'on).
BASH_VERSINFO[1] El numero menor de version (la versi'on).
BASH_VERSINFO[2] El nivel de parcheo.
BASH_VERSINFO[3] La version de construccion.
BASH_VERSINFO[4] El estado de la distribucion (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 parametro sea referenciado, se genera un
entero aleatorio entre 0 y 32767. La secuencia de numeros
aleatorios puede iniciarse asignando un valor a RANDOM. Si
RANDOM no esta definido, pierde sus propiedades especiales,
incluso si posteriormente es redefinido.
SECONDS
Cada vez que este parametro es referenciado, se devuelve en el
el numero de segundos transcurridos desde la llamada al shell.
Si se asigna un valor a SECONDS, el valor devuelto en
posteriores referencias es el numero de segundos desde la
asignacion mas el valor asignado. Si SECONDS no esta definido,
pierde sus propiedades especiales, incluso si posteriormente es
redefinido.
LINENO Cada vez que este parametro es referenciado, el shell sustituye
un numero en base 10 representando el numero de linea secuencial
actual (empezando por 1) dentro de un guion o funcion. Si no
estamos en un guion o funcion, no se garantiza que el valor
sustituido tenga significado. Si LINENO no esta definido,
pierde sus propiedades especiales, incluso si posteriormente es
redefinido.
HISTCMD
El numero de "historia", o indice en la lista "historica", de la
orden actual. Si HISTCMD no esta definido, pierde sus
propiedades especiales, incluso si posteriormente es redefinido.
DIRSTACK
Una variable vector (vea Vectores mas 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 asignacion a miembros de este vector
puede emplearse para modificar directorios que ya esten en la
pila, pero entonces deben utilizarse las ordenes internas pushd
y popd para anadir y quitar directorios. La asignacion a esta
variable no cambiara el directorio de trabajo. Si DIRSTACK no
esta definido, pierde sus propiedades especiales, incluso si
posteriormente es redefinido.
PIPESTATUS
Una variable vector (vea Vectores mas abajo) que contiene una
lista de valores de estado de salida de los procesos en la
tuberia en primer plano ejecutada mas recientemente (que puede
contener una sola orden).
OPTARG El valor del ultimo argumento que es una opcion procesado por la
orden interna getopts (vea 'ORDENES INTERNAS DEL SHELL mas
abajo).
OPTIND El indice del siguiente argumento a ser procesado por la orden
interna getopts (vea 'ORDENES INTERNAS DEL SHELL mas abajo).
HOSTNAME
Puesto automaticamente al nombre del anfitrion (computador)
actual.
HOSTTYPE
Puesto automaticamente a una cadena que describe de forma
univoca el tipo de maquina en la que bash se esta ejecutando.
El valor predefinido depende del sistema.
OSTYPE Puesto automaticamente a una cadena que describe el sistema
operativo en el que bash se esta ejecutando. El valor
predefinido depende del sistema. En Linux es "linux".
MACHTYPE
Puesto automaticamente a una cadena que describe completamente
el tipo de sistema en el que bash se esta ejecutando, en el
formato estandar de GNU cpu-compa~n'ia-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
valido para la opcion -o de la orden interna set (vea 'ORDENES
INTERNAS DEL SHELL abajo). Las opciones que aparecen en
SHELLOPTS son aquellas que aparecen como on en set -o. Si esta
variable esta en el ambiente cuando bash empieza, cada opcion
del shell en la lista se activara 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 division de
palabras tras la expansion y para dividir lineas en palabras con
la orden interna read. El valor predeterminado es
``<espacio><tab><nueva-linea>''.
PATH El camino de busqueda para ordenes, programas ejecutables. Es
una lista de directorios separados por dos puntos en los cuales
el shell busca ordenes (vea EJECUCI'ON DE 'ORDENES mas abajo). El
camino predeterminado depende del sistema, y lo pone el
administrador que instala bash. Un valor comun 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 tambien cuando se realiza la expansion de
tilde.
CDPATH El camino de busqueda 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 parametro esta definido cuando bash esta ejecutando un
guion del shell, su valor se interpreta como un nombre de
fichero que contiene ordenes para iniciar el shell, como en
~/.bashrc. El valor de BASH_ENV esta sujeto a expansion de
parametros, sustitucion de ordenes y expansion aritmetica, antes
de ser interpretado como un nombre de fichero. PATH no se usa
para buscar el nombre de fichero resultante.
MAIL Si este parametro esta puesto a un nombre de fichero y la
variable MAILPATH no esta definida, bash informa al usuario de
la llegada de correo en el fichero especificado.
MAILCHECK
Especifica cuan 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 esta 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?"i$_
tiene carta!"'
Bash proporciona un valor predeterminado para esta variable,
pero la localizacion de los ficheros de correo del usuario que
emplea es dependiente del sistema (e.g., /var/spool/mail/$USER).
PS1 El valor de este parametro 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 parametro se expande como con PS1 y se emplea
como la cadena del indicador secundario. El valor predeterminado
es ``> ''.
PS3 El valor de este parametro se emplea como el indicador para la
orden select (vea GRAM'ATICA DEL SHELL mas arriba).
PS4 El valor de este parametro se expande como con PS1 y el valor se
imprime antes de cada orden que bash muestra durante una traza
de ejecucion. El primer caracter de PS4 se replica multiples
veces, tantas como sean necesarias, para indicar multiples
niveles de indireccion. El valor predeterminado es ``+ ''.
TIMEFORMAT
El valor de este parametro se emplea como una cadena de formato
para especificar como debe mostrarse la informacion de tiempos
para tuberias precedidas por la palabra reservada time. El
caracter % introduce una secuencia de escape que se expande a un
valor de tiempo o a otra informacion. 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 numero de segundos de CPU gastados en modo usuario.
%[p][l]S El numero de segundos de CPU gastados en modo sistema.
%P El porcentaje de CPU, computado como (%U + %S) -:- %R.
La p opcional es un digito que especifica la precisi'on, el
numero de decimales. Un valor de 0 hace que no se muestre
ningun 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 mas largo, incluyendo
minutos, en la forma MMmSS.FFs. El valor de p determina si se
incluye o no la fraccion.
Si esta variable no esta definida, bash actua como si tuviera el
valor $'\nreal\t%3lR\nuser\t%3lU\nsys%3lS'. Si el valor es
nulo, no se muestra ninguna informacion de tiempos. Se anade un
salto de linea al final cuando se muestra la cadena de formato.
HISTSIZE
El numero de ordenes a recordar en la historia de ordenes (vea
HISTORIA abajo). El valor predeterminado es 500.
HISTFILE
El nombre del fichero en el que se guarda la historia de ordenes
(vea HISTORIA abajo). El valor predeterminado es
~/.bash_history. Si no esta definido, no se guarda la historia
de ordenes cuando se acaba un shell interactivo.
HISTFILESIZE
El numero maximo de lineas 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 mas de ese
numero de lineas. El valor predeterminado es 500. El fichero de
historia se trunca tambien a este tamano tras escribir en el
cuando un shell interactivo termina.
OPTERR Si se pone al valor 1, bash muestra mensajes de error generados
por la orden interna getopts (vea 'ORDENES INTERNAS DEL SHELL
abajo). OPTERR se inicia a 1 cada vez que se llama al shell o
cuando se ejecuta un guion del shell.
LANG Empleado para determinar la categoria de localizacion
("escenario") para cualquier categoria no seleccionada
especificamente 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 categoria de localizacion.
LC_COLLATE
Esta variable determina el orden de clasificacion empleado
cuando se ordene el resultado de una expansion de nombres de
caminos, y determina el comportamiento de expresiones de rango,
clases de equivalencia, y secuencias de clasificacion dentro de
expansiones de nombres de caminos y concordancia de patrones.
LC_CTYPE
Esta variable determina la interpretacion 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 localizacion empleada para traducir
cadenas entrecomilladas con comillas dobles precedidas por un $.
PROMPT_COMMAND
Si esta definido, el valor se ejecuta como una orden antes de
mostrarse cada indicador primario.
IGNOREEOF
Controla la accion de un shell interactivo al recibir un
caracter EOF como sola entrada. Si esta definido, el valor es el
numero de caracteres EOF consecutivos que deben teclearse como
los primeros caracteres de una linea de entrada antes de que
bash acabe. Si la variable existe pero no tiene un valor
numerico, 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 numero de segundos que hay que esperar una entrada
despues de mostrarse el indicador primario. Bash termina
despues de esperar ese numero 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 terminacion 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 expansion de nombres de caminos. Si un nombre de fichero
que concordaba en un patron de expansion de nombres de caminos
tambien 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 lineas que comiencen
con un caracter espacio no se meten en la lista de historia. Si
se pone a un valor de ignoredups, las lineas que concuerden con
la ultima linea de la historia, no se meten. Un valor de
ignoreboth combina las dos opciones. Si no esta definido, o si
lo esta a otro valor distinto de los de antes, todas las lineas
leidas por el analizador lexico se guardan en la lista de la
historia, sujeto esto al valor de HISTIGNORE. La funcion de
esta variable ha sido tomada por HISTIGNORE. La segunda linea y
siguientes de una orden compuesta multi-linea no se comprueban,
y se anaden a la historia sin importar el valor de HISTCONTROL.
HISTIGNORE
Una lista de patrones separados por dos puntos empleados para
decidir que lineas de ordenes deben guardarse en la lista de
historia. Cada patron se ancla al principio de la linea y debe
especificar la linea completamente (no se anade ningun `*').
Cada patron se comprueba con la linea tras aplicarse las
comprobaciones especificadas por HISTCONTROL. Ademas de los
caracteres normales de concordancia de patrones del shell, `&'
concuerda con la linea de historia anterior. `&' puede
protegerse empleando una barra inversa. Esta se quita antes de
intentarse una concordancia. La segunda linea y siguientes de
una orden compuesta multi-linea no se comprueban, y se anaden a
la historia sin importar el valor de HISTIGNORE.
histchars
Los dos o tres caracteres que controlan la expansion y
separacion en lexemas de la historia (vea EXPANSI'ON DE HISTORIA
abajo). El primer caracter es el car'acter de expansi'on de
historia, el caracter que senala el comienzo de una expansion de
historia, normalmente `!'. El segundo caracter es el caracter
de sustituci'on r'apida, 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
caracter, opcional, es el caracter que indica que el resto de la
linea es un comentario cuando se encuentra como el primer
caracter de una palabra, normalmente es `#'. El caracter de
comentario de historia hace que la sustitucion de historia se
salte en el resto de palabras de la linea. No hace que
necesariamente el analizador lexico del shell trate al resto de
la linea como un a un comentario.
HOSTFILE
Contiene el nombre de un fichero con el mismo formato que
/etc/hosts que deberia leerse cuando el shell necesite completar
un nombre de anfitrion (computador). El fichero puede ser
cambiado interactivamente; la siguiente vez que se intente
completar un nombre de computador, bash anade el contenido del
nuevo fichero a la base de datos ya existente.
auto_resume
Esta variable controla como el shell interactua con el usuario
para el control de trabajos. Si esta variable esta definida, las
ordenes simples de una palabra sin redireccion se tratan como
candidatas para reanudar un trabajo existente parado. No se
permite ninguna ambiguedad; si hay mas de un trabajo que empiece
con la cadena tecleada, se selecciona el trabajo al que se ha
accedido mas recientemente. El nombre de un trabajo parado, en
este contexto, es la linea de ordenes 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 analoga 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 analoga a la del identificador de trabajo %.
Vectores
Bash proporciona variables vectores, monodimensionales. Cualquier
variable puede usarse como un vector; la orden interna declare
declarara un vector explicitamente. No hay un limite maximo en el
tamano de un vector, ni ningun 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 indice cero, como en C.
Un vector se crea automaticamente si se asigna algo a una variable con
la sintaxis nombre['indice]=valor. El 'indice se trata como una expresion
aritmetica que debe evaluarse a un numero mayor o igual a cero. Para
declarar un vector explicitamente, emplee declare -a nombre (vea
'ORDENES INTERNAS DEL SHELL abajo). Tambien se acepta declare -a
nombre['indice], donde el 'indice no se tiene en cuenta. Se pueden
especificar atributos para una variable vector mediante las ordenes
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
['indice]=cadena. Solo cadena es necesario. Si se suministra el indice
entre corchetes y la asignacion, se asigna a ese indice; si no, el
indice del elemento asignado es el ultimo indice al que la sentencia le
asigno algo, mas uno. Los indices empiezan en cero. Esta sintaxis
tambien la acepta la orden interna declare. Se puede asignar a los
elementos individuales del vector empleando la sintaxis
nombre['indice]=valor, ya presentada antes.
Cualquier elemento de un vector puede referenciarse mediante
${nombre['indice]}. Las llaves son necesarias para evitar conflictos
con la expansion de nombres de caminos. Si 'indice es @ o *, la palabra
se expande a todos los miembros de nombre. Estos indices difieren
solamente cuando la palabra aparece entre comillas dobles. Si la
palabra esta entre comillas dobles, ${nombre[*]} se expande a una sola
palabra con el valor de cada miembro del vector separados por el primer
caracter 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 analogo a la expansion
de los parametros especiales * y @ (vea Par'ametros especiales arriba).
${#nombre['indice]} se expande a la longitud de ${nombre['indice]}. Si
'indice es * o @, la expansion es el numero de elementos del vector.
Referenciar una variable vector sin indice es equivalente a referenciar
el elemento cero.
La orden interna unset se emplea para destruir vectores. unset
nombre['indice] destruye el elemento del vector con el 'indice
especificado. unset nombre, donde nombre es un vector, o unset
nombre['indice], donde 'indice es * o @, borra el vector entero.
Las ordenes internas declare, local, y readonly aceptan cada una una
opcion -a para especificar un vector (array). La orden interna read
acepta una -a para asignar una lista de palabras leidas desde la
entrada estandar a un vector. Las ordenes internas set y declare
muestran valores de un vector en una manera tal que les permite ser
reutilizadas como asignaciones.
EXPANSI'ON
La expansion se realiza en la linea de ordenes una vez que la orden ha
sido dividida en palabras. Hay siete clases de expansion: expansi'on de
llaves, expansi'on de tilde, expansi'on de par'ametro y variable,
sustituci'on de orden, expansi'on aritm'etica, divisi'on de palabras,
expansi'on de nombre de camino.
La orden de las expansiones es: expansion de llaves, de tilde, de
parametro, variable y aritmetica, y sustitucion de orden (hechas de
izquierda a derecha), division de palabras, y expansion de nombre de
camino.
En sistemas que puedan admitirla, hay una expansion adicional
disponible: sustituci'on de proceso.
Solo la expansion de llaves, division de palabras, y expansion de
nombre de camino, pueden cambiar el numero de palabras de la expansion;
las otras expanden una palabra simple a otra palabra simple. Las unicas
excepciones a esto son las expansiones de "$@" y "${nombre[@]}" como se
ha explicado mas arriba (vea PAR'AMETROS).
Expansi'on de llaves
La expansi'on de llaves es un mecanismo por el cual pueden generarse
cadenas arbitrarias. Este mecanismo es similar a la expansi'on de nombre
de camino, pero los nombres de ficheros no necesitan existir. Los
patrones a ser expandidos con la expansion de llaves toman la forma de
un pre'ambulo opcional seguido por una serie de cadenas separadas por
comas entre un par de llaves, seguido por un post scriptum opcional.
El preambulo sirve de prefijo a cada cadena de entre las llaves, y el
post scriptum se anade 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 expansion de llaves se realiza antes que cualquier otra, y cualquier
caracter especial para otras expansiones se preserva en el resultado.
Es estrictamente textual. Bash no aplica ninguna interpretacion
sintactica al contexto de la expansion ni al texto entre las llaves.
Una expansion de llaves correctamente formada debe contener llaves de
apertura y cierre sin entrecomillar, y por lo menos una coma sin
entrecomillar. Cualquier expansion 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 expansion de llaves.
Esta construccion se emplea normalmente como una abreviatura cuando el
prefijo comun 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 expansion de llaves introduce una pequena incompatibilidad con
versiones historicas 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 expansion de llaves. Por ejemplo, una palabra
introducida a sh como fichero{1,2} aparece asi mismo en la entrada. La
misma palabra se muestra como fichero1 fichero2 tras la expansion hecha
por bash. Si se desea una compatibilidad estricta con sh, arranque
bash con la opcion +B o inhabilite la expansion de llaves con la opcion
+B de la orden interna set (vea 'ORDENES INTERNAS DEL SHELL abajo).
Expansi'on de tilde
Si una palabra comienza con un caracter tilde de la n 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 estan 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
vacia, la tilde se reemplaza con el valor del parametro del shell HOME.
Si HOME no esta definida, se sustituye en su lugar el directorio de
trabajo inicial del usuario que esta 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 esta definido, se sustituye. Si
los caracteres que siguen a la tilde en el prefijo-tilde consisten en
un numero N, prefijado opcionalmente por un `+' o un `-', el prefijo-
tilde se reemplaza con el elemento correspondiente de la pila de
directorios, como lo mostraria la orden interna dirs llamada con el
prefijo-tilde como argumento. Si los caracteres tras la tilde en el
prefijo-tilde consisten en un numero sin un `+' ni `-' iniciales, se
supone `+'.
Si el nombre de entrada es invalido, o si la expansion de tilde falla,
la palabra se deja tal cual.
A cada asignacion de variable se comprueba si hay prefijos-tilde sin
entrecomillar inmediatamente tras un : o un =. En estos casos, la
expansion de tilde tambien 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'on de par'ametro
El caracter `$' introduce la expansion de parametro, sustitucion de
orden, o expansion aritmetica. El nombre de parametro o simbolo a ser
expandido puede estar encerrado entre llaves, que son opcionales pero
sirven para proteger a la variable en la expansion 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 expansion aritmetica empotrada, sustitucion de orden, o expansion
de parametro.
${par'ametro}
Se sustituye el valor de par'ametro. Se requieren llaves cuando
par'ametro es un parametro posicional de mas de un digito, o
cuando par'ametro viene seguido por un caracter que no debe
interpretarse como parte de su nombre.
Si el primer caracter de par'ametro es un signo de cierre de
exclamacion, se introduce un nivel de indireccion de variable. Bash
emplea el valor de la variable formada a partir del resto de par'ametro
como el nombre de la variable; luego, esta variable se expande y ese
valor se emplea en el resto de la sustitucion, en vez del propio valor
de par'ametro. Esto se conoce como expansi'on indirecta.
En cada uno de los casos anteriores, palabra esta sujeta a expansion de
tilde, expansion de parametro, sustitucion de orden, y expansion
aritmetica. Cuando no se realiza la expansion de subcadena, bash
comprueba si un parametro esta sin definir o es nulo; si omitimos los
dos puntos la comprobacion solo es para la no definicion del parametro.
${par'ametro:-palabra}
Emplear valores predeterminados. Si par'ametro no esta definido
o esta vacio, se sustituye la expansion de palabra. De otro
modo, se sustituye el valor de par'ametro.
${par'ametro:=palabra}
Asignar valores predeterminados. Si par'ametro no esta definido
o es nulo, la expansion de palabra se asigna a par'ametro.
Luego, el valor de par'ametro se sustituye. No se puede asignar
nada de esta manera a los parametros posicionales ni a los
especiales.
${par'ametro:?palabra}
Muestra un error si no est'a definido o est'a vac'io. Si par'ametro
es nulo o no esta definido, la expansion de palabra (o un
mensaje a tal efecto si palabra no esta presente) se escribe en
la salida estandar de errores y el shell, si no es interactivo,
acaba. De otra manera, se sustituye el valor de par'ametro.
${par'ametro:+palabra}
Emplear un valor alternativo. Si par'ametro esta vacio o no esta
definido, no se sustituye nada; de otro modo, se sustituye la
expansion de palabra.
${par'ametro:desplazamiento}
${par'ametro:desplazamiento:longitud}
Expansi'on de subcadena. Expande hasta longitud caracteres de
par'ametro, empezando en los caracteres especificados por
desplazamiento. Si se omite la longitud, se expande a la
subcadena de par'ametro, empezando en el caracter especificado
por desplazamiento. longitud y desplazamiento son expresiones
aritmeticas (vea EVALUACI'ON ARITM'ETICA mas abajo). longitud
debe evaluarse a un numero mayor o igual a cero. Si
desplazamiento se evalua a un numero menor que cero, el valor se
emplea como un desplazamiento desde el final del valor de
par'ametro. Si par'ametro es @, el resultado es longitud
parametros posicionales empezando en desplazamiento. Si
par'ametro es un nombre de vector indexado por @ o *, el
resultado es longitud miembros del vector empezando con
${par'ametro[desplazamiento]}. La indexacion de la subcadena
empieza por cero a menos que se empleen los parametros
posicionales, en cuyo caso empieza por 1.
${#par'ametro}
Se sustituye la longitud en caracteres del valor de par'ametro.
Si par'ametro es * o @, el valor sustituido es el numero de
parametros posicionales. Si par'ametro es un nombre de vector
indexado por * o @, el valor sustituido es el numero de
elementos en el vector.
${par'ametro#palabra}
${par'ametro##palabra}
La palabra se expande para producir un patron lo mismo que en
una expansion de nombre de camino. Si el patron concuerda con el
principio del valor de par'ametro, entonces el resultado de la
expansion es el valor expandido de par'ametro con el patron mas
corto que concuerde (el caso ``#) o con el patron mas largo que
concuerde (el caso ``##'') eliminado. Si par'ametro es @ o *, la
operacion de borrado del patron se aplica a cada parametro
posicional por turnos, y la expansion es la lista resultante.
Si par'ametro es una variable vector indexada con @ o *, la
operacion de borrado del patron se aplica a cada miembro del
vector por orden, y la expansion es la lista resultante.
${par'ametro%palabra}
${par'ametro%%palabra}
La palabra se expande para producir un patron justo como en la
expansion de nombre de camino. Si el patron concuerda con una
porcion del final del valor expandido de par'ametro, entonces el
resultado de la expansion es el valor expandido de par'ametro con
el patron mas corto que concuerde (el caso ``%'') o el mas largo
(el caso ``%%'') borrado. Si par'ametro es @ o *, la operacion
de borrado del patron se aplica a cada parametro posicional por
orden, y la expansion es la lista resultante. Si par'ametro es
una variable vector indexada por @ o *, la operacion de borrado
del patron se aplica a cada miembro del vector por orden, y la
expansion es la lista resultante.
${par'ametro/patr'on/cadena}
${par'ametro//patr'on/cadena}
El patr'on se expande para producir un patron justo como en la
expansion de nombre de camino. par'ametro se expande y la
concordancia mas larga de patr'on contra este valor se reemplaza
por cadena. En la primera forma, solo se reemplaza la primera
concordancia. La segunda forma hace que todas las concordancias
de patr'on se reemplacen con cadena. Si patr'on empieza por #,
debe concordar con el principio de la cadena. Si patr'on empieza
por %, debe concordar con el final de la cadena. Si cadena esta
vacia, las concordancias de patr'on se borran y el / que sigue al
patr'on puede omitirse. Si par'ametro es @ o *, la operacion de
sustitucion se aplica a cada parametro posicional por orden, y
la expansion es la lista resultante. Si par'ametro es una
variable vector indexada por @ o *, la operacion de sustitucion
se aplica a cada miembro del vector por orden, y la expansion es
la lista resultante.
Sustituci'on de orden
La sustituci'on de orden permite a la salida de una orden reemplazar al
nombre de la orden. Hay dos formas:
$(orden)
u
`orden`
Bash realiza la expansion ejecutando orden y reemplazando la
sustitucion de orden con la salida estandar de la orden, quitando los
saltos de linea finales. Los saltos de linea empotrados no se borran,
pero pueden ser eliminados durante la division de palabras. La
sustitucion de orden $(cat fichero) puede reemplazarse por lo
equivalente pero mas rapido $(< fichero).
Cuando se emplea la forma de sustitucion 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 sustitucion de orden.
Cuando se emplea la forma $(orden), todos los caracteres entre los
parentesis 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 sustitucion aparece dentro de las dobles comillas, la division de
palabras y la expansion de nombres no se realiza en los resultados.
Expansi'on aritm'etica
La expansion aritmetica permite la evaluacion de una expresion
aritmetica y la sustitucion del resultado. El formato para la expansion
aritmetica es:
$((expresi'on))
La expresi'on se trata como si estuviera entre comillas dobles, pero un
signo de doble comilla dentro de los parentesis no se trata
especialmente. Todos los lexemas en la expresion estan sujetos a
expansion de parametro, expansion de cadena, sustitucion de orden, y
eliminacion de comillas. Las sustituciones aritmeticas pueden
anidarse.
La evaluacion se realiza de acuerdo a las reglas listadas mas abajo en
EVALUACI'ON ARITM'ETICA. Si expresi'on no es valida, bash imprime un
mensaje indicando el fallo y no ocurre ninguna sustitucion.
Sustituci'on de proceso
La sustituci'on de proceso se admite en sistemas que acepten tuberias
con nombre (FIFOs) o el metodo /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 algun
fichero en /dev/fd. El nombre de este fichero se pasa como argumento a
la orden en curso como el resultado de la expansion. 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 debera leerse para obtener la salida de lista.
Cuando este disponible, se realiza la sustituci'on de proceso
simultaneamente con la expansion de parametro y variable, sustitucion
de orden y expansion aritmetica.
Divisi'on de palabras
El shell examina los resultados de la expansion de parametro,
sustitucion de orden y expansion aritmetica que no ocurrieron dentro de
comillas dobles para realizar la divisi'on de palabras.
El shell trata cada caracter de IFS como un delimitador, y divide los
resultados de las otras expansiones en palabras separadas por estos
caracteres. Si IFS no esta definido, o su valor es exactamente
<espacio><tab><nueva-l'inea>, el valor predeterminado, entonces
cualquier secuencia de caracteres de IFS sirve para delimitar palabras.
Si IFS tiene algun 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 caracter de espacio
en blanco este en el valor de IFS (un caracter de espacio en blanco de
IFS). Cualquier caracter en IFS que no sea espacio en blanco de IFS,
junto con cualquier caracter de espacio en blanco adyacente de IFS,
delimita un campo. Una secuencia de caracteres de espacio en blanco de
IFS tambien se trata como un delimitador. Si el valor de IFS es nulo,
no se realiza la division de palabras.
Los argumentos nulos explicitos ("" o '') se mantienen. Los argumentos
nulos no protegidos implicitos, resultantes de la expansion de
par'ametros que no tienen valores, se eliminan. Si un parametro sin
ningun valor se expande dentro de comillas dobles, el resultado es un
argumento nulo, y es mantenido.
Observe que si no hay expansion, tampoco se realiza la division de
palabras.
Expansi'on de nombre de camino
Tras la division de palabras, a menos que la opcion -f este puesta,
bash examina cada palabra buscando los caracteres *, ?, (, y [. Si uno
de estos caracteres aparece, entonces la palabra se considera como un
patr'on, y se reemplaza por una lista ordenada alfabeticamente de
nombres de ficheros que concuerden con el patron. Si no se encuentran
nombres de ficheros concordantes, y la opcion del shell nullglob esta
deshabilitada, la palabra se deja tal cual. Si la opcion nullglob esta
puesta, y no ha habido ninguna concordancia, la palabra se elimina. Si
la opcion del shell nocaseglob esta puesta, la busqueda de la
concordancia se realiza sin importar si los caracteres alfabeticos son
letras mayusculas o minusculas. Cuando un patron se usa para expansion
de nombre de camino, el caracter ``.'' al principio de un nombre o
inmediatamente despues de una barra inclinada debe concordar
explicitamente, a menos que este puesta la opcion del shell dotglob.
En la concordancia de un nombre de camino, el caracter de barra
inclinada debe siempre coincidir explicitamente. En otros casos, el
caracter ``.'' no se trata de forma especial. Vea la descripcion de
shopt mas abajo en 'ORDENES INTERNAS DEL SHELL para una descripcion 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 patr'on. Si
GLOBIGNORE esta definido, cada nombre de fichero concordante que
tambien 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 este puesto. Sin
embargo, definir GLOBIGNORE tiene el efecto de activar la opcion del
shell dotglob, de modo que todos los otros nombres de fichero que
comiencen con un ``.'' concordaran. 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
opcion dotglob esta deshabilitada cuando GLOBIGNORE no esta definido.
Patrones
Cualquier caracter que aparezca en un patron, aparte de los especiales
descritos mas adelante, concuerda consigo mismo. El caracter NUL no
puede estar en un patron. Los caracteres de patron especiales deben
protegerse si han de concordar literalmente consigo mismos.
Los caracteres de patron especiales tienen los siguientes significados:
* Concuerda con cualquier cadena de caracteres, incluida la cadena
vacia.
? Concuerda con un solo caracter cualquiera.
[...] Concuerda con uno de los caracteres entre corchetes. Un par de
caracteres separados por un signo menos denota un rango;
cualquier caracter lexicamente entre esos dos, incluidos,
concuerda. Si el primer caracter tras el [ es un ! o un ^,
entonces la concordancia es con cualquier caracter de los que no
esten entre los corchetes. Un - puede representarse para la
concordancia incluyendolo como el primer o ultimo caracter del
conjunto. Un ] puede hacerse concordar incluyendolo como el
primer caracter 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 estandar POSIX.2:
alnum alpha ascii blank cntrl digit graph lower print punct
space upper xdigit
Una clase de caracteres concuerda con cualquier caracter 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 clasificacion (tal como lo
defina la localizacion en curso) que el caracter c.
Dentro de [ y ], la sintaxis [.s'imbolo.] concuerda con el
simbolo de clasificacion s'imbolo.
Si la opcion del shell extglob se activa usando la orden interna shopt,
se reconocen algunos operadores de patrones extendidos. En la siguiente
descripcion, una lista-patr'on es una lista de uno o mas patrones
separados por un |. Se pueden formar patrones compuestos usando uno o
mas de los siguientes sub-patrones:
?(lista-patr'on)
Concuerda con ninguna o una ocurrencia de los patrones
dados
*(lista-patr'on)
Concuerda con ninguna o mas ocurrencias de los patrones
dados
+(lista-patr'on)
Concuerda con una o mas ocurrencias de los patrones dados
@(lista-patr'on)
Concuerda exactamente con uno de los patrones dados
!(lista-patr'on)
Concuerda con cualquier cosa excepto con uno de los
patrones dados
Eliminaci'on 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'ON
Antes de que se ejecute una orden, su entrada y salida pueden ser
redirigidas usando una notacion especial interpretada por el shell. La
redireccion tambien se puede emplear para abrir y cerrar ficheros en el
entorno de ejecucion del shell en curso. Los operadores de redireccion
siguientes pueden preceder o aparecer en cualquier sitio de una orden
simple o pueden ir detras 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 numero del descriptor
de fichero, y el primer caracter del operador de redireccion es <, la
redireccion se refiere a la entrada estandar (descriptor de fichero 0).
Si el primer caracter del operador de redireccion es >, la redireccion
se refiere a la salida estandar (descriptor de fichero 1).
La palabra tras el operador de redireccion en las descripciones
siguientes, a menos que se diga otra cosa, esta sujeta a la expansion
de llaves, expansion de tilde, expansion de parametro, sustitucion de
orden, expansion aritmetica, eliminacion de comillas, y expansion de
nombre de camino. Si se expande a mas 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 estandar normal y la de errores, ambas, al fichero
listadir, mientras que la orden
ls 2>&1 > listadir
dirige solamente la salida estandar al fichero listadir, porque la
salida de errores estandar se ha duplicado como salida estandar antes
de que esta se redirigiera a listadir.
Un fallo en la apertura o creacion de un fichero hace que la
redireccion fracase.
Redirecci'on de la entrada
La redireccion de la entrada hace que el fichero cuyo nombre resulte de
la expansion de palabra se abra para lectura en el descriptor de
fichero n, o la entrada estandar (descriptor de fichero 0) si no se
especifico n.
El formato general para la redireccion de la entrada es:
[n]<palabra
Redirecci'on de la salida
la redireccion de la salida hace que el fichero cuyo nombre resulte de
la expansion de palabra se abra para escritura en el descriptor de
fichero n, o la salida estandar (descriptor de fichero 1) si n no se
especifico. Si el fichero no existe se crea; si existe se trunca a
longitud cero, se vacia.
El formato general para la redireccion de la salida es:
[n]>palabra
Si el operador de redireccion es >, y la opcion noclobber de la orden
interna set ha sido activada, la redireccion fallara si el nombre de
fichero resultante de la expansion de palabra existiera y fuera un
fichero regular. Si el operador de redireccion es >|, o es > y la
opcion noclobber de la orden interna set no esta activada, la
redireccion se intenta incluso si el fichero nombrado por palabra
existe.
A~nadir a la salida redirigida
La redireccion de la salida en esta forma hace que el fichero cuyo
nombre resulte de la expansion de palabra se abra para anadir en el
descriptor de fichero n, o la salida estandar (descriptor de fichero 1)
si n no se especifico. Si el fichero no existe, se crea.
El formato general para anadir a la salida es:
[n]>>palabra
Redirecci'on de la salida est'andar normal y de errores
Bash permite que ambas salidas estandares, la normal (descriptor de
fichero 1) y la de errores (descriptor de fichero 2) se redirijan hacia
el fichero cuyo nombre sea la expansion de palabra con esta
construccion.
hay dos formatos para la redireccion de la salida estandar y la salida
de errores:
&>palabra
y
>&palabra
De las dos formas, es preferible la primera. Esta es semanticamente
equivalente a
>palabra 2>&1
Documentos internos
Este tipo de redireccion instruye al shell a leer la entrada desde la
fuente en curso hasta que vea una linea que contenga solamente palabra
(sin blancos detras). Todas las lineas leidas hasta ese punto se
emplean como la entrada estandar de una orden.
El formato de los documentos internos es como sigue:
<<[-]palabra
documento-interno
delimitador
No se realiza la expansion de parametro, sustitucion de orden,
expansion de nombre de camino ni expansion aritmetica en palabra. Si
cualquier caracter de palabra esta entrecomillado, el delimitador es el
resultado de la eliminacion de comillas en palabra, y las lineas en el
documento interno no se expanden. Si palabra no esta entrecomillada,
todas las lineas del documento interno estan sujetas a expansion de
parametro, sustitucion de orden y expansion aritmetica. En el ultimo
caso, el par \<nueva-l'inea> no se tiene en cuenta, y debe emplearse \
para proteger los caracteres \, $, y `.
Si el operador de redireccion es <<-, entonces se quitan de las lineas
de la entrada todos los caracteres de tabulacion iniciales, asi como de
la linea que contiene delimitador. Esto permite que los documentos
internos dentro de guiones del shell se sangren de manera natural.
Duplicaci'on de descriptores de fichero
El operador de redireccion
[n]<&palabra
se emplea para duplicar descriptores de ficheros de entrada. Si
palabra se expande a uno o mas digitos, el descriptor de fichero
denotado por n se hace ser una copia de este descriptor de fichero. Si
los digitos en palabra no especifican un descriptor de fichero abierto
para entrada, se produce un error de redireccion. Si palabra se evalua
a -, el descriptor de fichero n se cierra. Si n no se especifica, se
emplea la entrada estandar (descriptor de fichero 0).
El operador
[n]>&palabra
se emplea similarmente para duplicar descriptores de ficheros de
salida. Si n no se especifico, se emplea la salida estandar (descriptor
de fichero 1). Si los digitos en palabra no especifican un descriptor
de fichero abierto para salida, se produce un error de redireccion.
Como un caso especial, si n se omite, y palabra no se expande a uno o
mas digitos, se redirigen la salida estandar y la salida estandar de
errores como se describio con anterioridad.
Apertura de descriptores de ficheros para lectura y escritura
El operador de redireccion
[n]<>palabra
hace que el fichero cuyo nombres sea la expansion 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
ordenes internas alias y unalias (vea 'ORDENES INTERNAS DEL SHELL
abajo). Se mira a ver si la primera palabra de cada orden, si no esta
entrecomillada, tiene un alias. Si es asi, cada palabra se reemplaza
con el texto del alias. El nombre del alias y el texto de reemplazo
pueden contener cualquier entrada valida para el shell, incluyendo los
metacaracteres listados arriba, con la excepcion 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 identico al que se
esta 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 ultimo caracter
del valor del alias es un blanco, entonces la siguiente palabra de la
orden que sigue al alias tambien se mira para la expansion de alias.
Los alias se crean y listan con la orden alias, y se quitan con la
orden unalias.
No hay ningun mecanismo para poder usar argumentos en el texto de
reemplazo. Si se necesitan, deberia emplearse mejor una funcion del
shell.
Los alias no se expanden cuando el shell no es interactivo, a menos que
se haya puesto la opcion expand_aliases mediante shopt (vea la
descripcion de shopt bajo 'ORDENES INTERNAS DEL SHELL abajo).
Las reglas que conciernen a la definicion y uso de los alias son algo
confusas. Bash siempre lee por lo menos una linea completa de entrada
antes de ejecutar cualquiera de las ordenes de esa linea. Los alias se
expanden cuando se lee una orden, no cuando se ejecuta. Por lo tanto,
una definicion de alias que aparezca en la misma linea que otra orden
no tiene efecto hasta que se lea la siguiente linea de entrada. Las
ordenes que sigan a la definicion de alias en esa linea no se ven
afectadas por el nuevo alias. Este comportamiento tambien hay que
tenerlo en cuenta cuando se ejecutan funciones. Los alias se expanden
cuando se lee una definicion de funcion, no cuando la funcion se
ejecuta, porque una definicion de funcion es en si misma una orden
compuesta. Como consecuencia, los alias definidos en una funcion no
estan disponibles hasta despues de que esa funcion se ejecute. Para
asegurarse, ponga siempre las definiciones de alias en una linea
separada, y no emplee la orden alias en ordenes compuestas.
Para casi cualquier proposito, los alias pueden sustituirse por
funciones del shell.
FUNCIONES
Una funcion del shell, definida como se describio anteriormente bajo
GRAM'ATICA DEL SHELL, guarda una serie de ordenes para una ejecucion
posterior. Las funciones se ejecutan en el contexto del shell en
curso; no se crea ningun nuevo proceso para interpretarlas (en
contraste con la ejecucion de un guion del shell). Cuando una funcion
se ejecuta, los argumentos de la funcion se convierten en los
parametros posicionales durante su ejecucion. El parametro especial #
se actualiza para reflejar el cambio. El parametro posicional 0
permanece intacto. Todos los demas aspectos del entorno de ejecucion
del shell son identicos entre una funcion y quien la llama con la
excepcion de que la trampa DEBUG (vea la descripcion de la orden
interna trap bajo 'ORDENES INTERNAS DEL SHELL mas adelante) no se
hereda.
Variables locales a la funcion se pueden declarar con la orden interna
local. Normalmente, las variables y sus valores se comparten entre la
funcion y quien la llama, como variables globales.
Si se ejecuta la orden interna return en una funcion, este se acaba y
la ejecucion se reanuda con la siguiente orden tras la llamada a la
funcion. Cuando una funcion se completa, los valores de los parametros
posicionales y el parametro especial # se restauran a los valores que
tenian antes de la ejecucion de la funcion.
Los nombres de funcion y sus definiciones pueden listarse con la opcion
-f de las ordenes internas declare o typeset. La opcion -F de declare
o typeset listara solamente los nombres de las funciones. Las
funciones pueden exportarse de modo que los subshells las tengan
definidas automaticamente con la opcion -f de la orden interna export.
Las funciones pueden ser recursivas. No se impone ningun limite en el
numero de llamadas recursivas.
EVALUACI'ON ARITM'ETICA
El shell permite que se evaluen expresiones aritmeticas, bajo ciertas
circunstancias (vea la orden interna let y Expansi'on aritm'etica). La
evaluacion se hace con enteros largos sin comprobacion de
desbordamiento, aunque la division por 0 se atrapa y se senala 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 mas unarios
! ~ negacion logica y de bits
** exponenciacion
* / % multiplicacion, division, resto
+ - adicion, sustraccion
<< >> desplazamientos de bits a izquierda y derecha
<= >= < >
comparacion
== != igualdad y desigualdad
& Y de bits (AND)
^ O exclusivo de bits (XOR)
| O inclusivo de bits (OR)
&& Y logico (AND)
|| O logico (OR)
expr?expr:expr
evaluacion condicional
= *= /= %= += -= <<= >>= &= ^= |=
asignacion
Se permite que las variables del shell actuen como operandos; se
realiza la expansion de parametro antes de la evaluacion de la
expresion. El valor de un parametro se fuerza a un entero largo dentro
de una expresion. Una variable del shell no necesita tener activado su
atributo de entero para emplearse en una expresion.
Las constantes con un 0 inicial se interpretan como numeros octales.
Un 0x o 0X inicial denota un numero en hexadecimal. De otro modo, los
numeros toman la forma [base#]n, donde base es un numero en base 10
entre 2 y 64 que representa la base aritmetica, y n es un numero en esa
base. Si base se omite, entonces se emplea la base 10. Los digitos
mayores que 9 se representan por las letras minusculas, las metras
mayusculas, _, y @, en este orden. Si base es menor o igual que 36,
las letras minusculas y mayusculas pueden emplearse indistintamente
para representar numeros entre 10 y 35.
Los operadores se evaluan en orden de precedencia. Las sub-expresiones
entre parentesis se evaluan primero y pueden sustituir a las reglas de
precedencia anteriores.
EXPRESIONES CONDICIONALES
Las expresiones condicionales son empleadas por la orden compuesta [[ y
por las ordenes internas test y [ para comprobar los atributos de
ficheros y realizar comparaciones de cadenas y aritmeticas. 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 tuberia con nombre (FIFO).
-r fichero
Verdad si fichero existe y se puede leer.
-s fichero
Verdad si fichero existe y tiene un tamano mayor que cero.
-t fd Verdad si el descriptor de fichero fd esta 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 simbolico o blando.
-S fichero
Verdad si fichero existe y es un zocalo (socket).
-N fichero
Verdad si fichero existe y ha sido modificado desde que se leyo
la ultima vez.
fichero1 -nt fichero2
Verdad si fichero1 es mas reciente (segun la fecha de
modificacion) que fichero2.
fichero1 -ot fichero2
Verdad si fichero1 es mas antiguo que fichero2.
fichero1 -ef fichero2
Verdad si fichero1 y fichero2 tienen los mismos numeros de
nodo-i y de dispositivo.
-o nombre-opci'on
Verdad si la opcion del shell nombre-opci'on esta activada. Vea
la lista de opciones bajo la descripcion de la opcion -o de la
orden interna set mas 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. Tambien se puede emplear =
en vez de ==.
cadena1 != cadena2
Verdad si las cadenas no son iguales.
cadena1 < cadena2
Verdad si cadena1 se ordena lexicograficamente antes de cadena2
en la localizacion en curso.
cadena1 > cadena2
Verdad si cadena1 se clasifica lexicograficamente tras cadena2
en la localizacion en curso.
arg1 OP arg2
OP es uno de -eq, -ne, -lt, -le, -gt, o -ge. Estos operadores
aritmeticos 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'ON 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 (aquellas 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 expansion quedan aun
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 describio mas arriba bajo
REDIRECCI'ON.
4. El texto tras el = en cada asignacion de variable esta sujeto a
expansion de tilde, expansion de parametro, sustitucion de
orden, expansion aritmetica y eliminado de comillas antes de ser
asignado a la variable.
Si no resulta ningun nombre de orden, las asignaciones de variables
afectan al entorno actual del shell. De otro modo, las variables se
anaden 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 ningun nombre de orden, se hacen las redirecciones, pero
no afectan al entorno del shell en curso. Un error de redireccion hace
que el shell acabe con un estado distinto de cero.
Si hay un nombre de orden tras la expansion, la ejecucion procede como
se describio antes. De otro modo, la orden sale. Si una de las
expansiones contenia una sustitucion de orden, el estado de salida de
la orden es el de la ultima sustitucion de orden realizada. Si no habia
sustituciones de ordenes, la orden acaba con un estado de cero.
EJECUCI'ON DE 'ORDENES
Despues 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 funcion del shell con ese nombre,
esa funcion se llama como se describio arriba en FUNCIONES. Si el
nombre no coincide con el de ninguna funcion, el shell lo busca en la
lista de ordenes internas. Si se encuentra, se llama a la orden interna
correspondiente.
Si el nombre no es ni una funcion 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 dispersion (hash) para recordar los nombres de
camino completos de los ficheros ejecutables (vea hash en 'ORDENES
INTERNAS DEL SHELL abajo). Solo se realiza una busqueda completa de
los directorios de PATH si la orden no se encuentra en la tabla de
dispersion. Si la busqueda no es satisfactoria, el shell muestra un
mensaje de error y devuelve un estado de salida de 127.
Si la busqueda fue exitosa, o si el nombre de la orden contiene una o
mas barras inclinadas, el shell ejecuta el programa con ese nombre en
un entorno de ejecucion 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 ejecucion fallara porque el fichero no tuviera un formato
ejecutable, y el fichero no fuera un directorio, se supone que es un
gui'on del shell, un fichero que contiene ordenes del shell. Se crea un
subshell para ejecutarlo. Este subshell se reinicia a si mismo, asi
que el efecto es el mismo que si se hubiera llamado a un nuevo shell
para manejar el guion, con la excepcion de que el hijo retiene las
localizaciones de ordenes recordadas por el padre (vea hash abajo en
'ORDENES INTERNAS DEL SHELL).
Si el programa es un fichero que empieza con los dos caracteres #!, el
resto de la primera linea especifica un interprete para el programa. El
shell ejecuta el interprete especificado en sistemas operativos que no
manejen por si mismos este formato de ejecutable. Los argumentos del
interprete consisten en un solo argumento opcional tras el nombre del
interprete en la primera linea del programa, seguido del nombre del
programa, seguido por los argumentos de la orden, si los hubiera.
ENTORNO DE EJECUCI'ON DE 'ORDENES
El shell tiene un entorno de ejecuci'on, que consiste en lo siguiente:
o ficheros abiertos heredados por el shell en la llamada, quizas
modificada por redirecciones suministradas a la orden interna
exec
o el directorio de trabajo en curso, establecido por cd, pushd o
popd, o heredado por el shell en la llamada
o la mascara de modo de creacion de ficheros, establecida por
umask o heredada del padre del shell
o las trampas en curso establecidas por trap
o parametros del shell que han sido establecidos por asignaciones
de variables o con set, o heredados del padre del shell en el
entorno
o funciones del shell definidas durante la ejecucion o heredadas
del padre del shell en el entorno
o opciones activadas en la llamada (bien por omision o mediante
argumentos en la linea de ordenes) o por set
o opciones activadas mediante shopt
o alias del shell definidos con alias
o 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 funcion del shell
se va a ejecutar, se llama en un entorno de ejecucion separado que
consiste en lo siguiente. A menos que se diga otra cosa, los valores se
heredan del shell.
o los ficheros abiertos del shell, mas las modificaciones y
adiciones especificadas en la orden por redirecciones
o el directorio de trabajo en curso
o la mascara de modo de creacion de ficheros
o variables del shell marcadas para la exportacion, junto con
variables exportadas para la orden, pasadas en el entorno
o 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 ejecucion del shell.
La sustitucion de ordenes y las ordenes asincronas 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 heredo de su padre en la llamada. Las ordenes internas que se
llaman como parte de una tuberia se ejecutan tambien en un entorno de
subshell. Los cambios hechos al entorno del subshell no pueden afectar
al entorno de ejecucion 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 escudrina el entorno y crea un parametro para
cada nombre encontrado, marcandolo automaticamente para la exportaci'on
a procesos hijos. Las ordenes ejecutadas heredan el entorno. Las
ordenes export y declare -x permiten anadir y quitar parametros y
funciones del entorno. Si el valor de un parametro 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 mas las
adiciones con las ordenes export y declare -x.
El entorno para cualquier orden simple o funcion puede aumentarse
temporalmente prefijandola con asignaciones de parametros, como se
describio arriba en PAR'AMETROS. Estas sentencias de asignacion afectan
solamente al entorno visto por esa orden.
Si la opcion -k esta puesta (vea la orden interna set mas adelante),
entonces todas las asignaciones de parametros se ponen en el entorno
para una orden, no solo 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 propositos del shell, una orden que acabe con un estado de
salida cero, ha tenido exito. Un estado de salida de cero indica exito.
Un estado de salida distinto de cero indica fallo. Cuando una orden
termina por una senal fatal, bash emplea el valor de 128+se~nal 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 expansion o
redireccion, el estado de salida es mayor que cero.
Las ordenes incorporadas en el shell devuelven un estado de 0 (verdad)
si acaban con exito, y distinto de cero (falso) si ocurre un error
mientras se ejecutan. Todas las ordenes 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 ultima orden
ejecutada, a menos que ocurra un error de sintaxis, en cuyo caso acaba
con un estado distinto de cero. Vea tambien la orden interna exit
abajo.
SE~NALES
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 sincronos empezados por bash tienen manejadores de senal
puestos a los valores heredados por el shell de su padre. Cuando el
control de trabajo no esta en efecto, las ordenes internas no hacen
caso de SIGINT ni SIGQUIT tampoco. Las ordenes ejecutadas como
resultado de sustitucion de orden no hacen caso de las senales de
control de trabajo generadas mediante el teclado SIGTTIN, SIGTTOU, ni
SIGTSTP.
El shell, de forma predeterminada, acaba cuando recibe una senal
SIGHUP. Antes de salir, reenvia la senal SIGHUP a todos los trabajos,
en ejecucion o parados. A los trabajos parados se les envia SIGCONT
para asegurarse de que reciben la senal SIGHUP. Para prevenir que el
shell envie la senal a un trabajo particular, deberia quitarse de la
lista de trabajos con la orden interna disown (vea 'ORDENES INTERNAS DEL
SHELL mas abajo) o marcarlo para no recibir SIGHUP empleando disown -h.
Si la opcion del shell huponexit se ha puesto mediante shopt, bash
envia una senal SIGHUP a todos los trabajos cuando un shell de entrada
interactivo se acaba.
Cuando bash recibe una senal para la que se ha puesto una trampa
mientras se se esta esperando que una orden se complete, la trampa no
se ejecutara hasta que la orden se complete. Cuando bash esta
esperando una orden asincrona mediante la orden interna wait, la
recepcion de una senal para la que se ha definido una trampa, hara 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 ejecucion de procesos y continuar
(reanudar) su ejecucion posteriormente. Un usuario emplea esta
facilidad tipicamente a traves de una interfaz interactiva suministrada
conjuntamente por el controlador de terminal del sistema y bash.
El shell asocia un trabajo con cada tuberia. Mantiene una tabla de
trabajos ejecutandose actualmente, que pueden listarse con la orden
jobs. Cuando bash arranca un trabajo asincronamente (en segundo
plano), imprime una linea con un aspecto como esta:
[1] 25647
indicando que este trabajo es el numero 1 y que el PID del ultimo
proceso en la tuberia asociada con el es 25647. Todos los procesos en
una misma tuberia son miembros del mismo trabajo. Bash emplea la
abstraccion del trabajo como la base para el control de trabajos.
Para facilitar la implementacion de la interfaz del usuario al control
de trabajos, el sistema mantiene la nocion 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 senales generadas por el teclado como SIGINT. Se dice
que estos procesos estan en primer plano. Los procesos en segundo
plano son aquellos cuyo PGID difiere del de la terminal; tales procesos
son inmunes a senales generadas desde el teclado. Solo 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 senal SIGTTIN
(SIGTTOU) que, a menos que sea capturada, suspende el proceso.
Si el sistema operativo en el que bash se esta ejecutando, admite el
control de trabajos (Linux lo admite, por supuesto), bash le permite
usarlo. Teclear el caracter suspender (tipicamente ^Z, Control-Z)
mientras que un proceso se esta ejecutando, hace que ese proceso se
pare y le devuelve a Ud. al bash. Teclear el caracter suspensi'on
diferida (tipicamente ^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 el en segundo plano, la orden
fg para continuar con el 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 bufer de
entrada del teclado se descartan.
Hay varias formas de referirse a un trabajo en el shell. El caracter %
introduce un nombre de trabajo. El trabajo numero 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 linea de ordenes. Por ejemplo. %ce se refiere a un
trabajo ce parado. Si un prefijo concuerda con mas 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 linea de ordenes. Si la
subcadena concuerda con mas de un trabajo, bash informa de un error.
Los simbolos %% y %+ se refieren a la nocion que tiene el shell del
trabajo en curso, que es el ultimo trabajo parado mientras estaba en
primer plano o se arranco 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 sinonimo de ``fg %1'', que trae el trabajo
numero 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 esta 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 opcion -b de la orden
interna set esta 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 ningun otro aviso, y
los trabajos parados se hacen terminar.
INDICADORES
Cuando se ejecuta interactivamente, bash muestra el indicador primario
PS1 cuando esta dispuesto para leer una orden, y el secundario PS2
cuando necesita mas entrada para completar una orden. Bash permite que
estas cadenas indicadoras se personalicen insertando un numero de
caracteres especiales protegidos con la barra inversa, que se
interpretan como sigue:
\a un caracter de alerta ASCII (07)
\d la fecha en el formato "Dia-Semana Mes Dia" (ejemplo,
"Tue May 26") en ingles
\e un caracter de escape (ESC) ASCII (033)
\h el nombre del computador anfitrion hasta el primer `.'
\H el nombre del computador anfitrion completo
\n salto de linea
\r retorno de carro
\s el nombre del shell, el nombre base de $0 (la porcion que
sigue a la ultima 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 version de bash (e.g., 2.00)
\V la distribucion de bash, version + nivel de parcheo
(e.g., 2.00.0)
\w el directorio de trabajo en curso
\W el nombre base del directorio de trabajo
\! el numero de historia de esta orden
\# el numero de orden de esta orden
\$ si el UID efectivo es 0 (el super-usuario), un #, si no
un $
\nnn el caracter correspondiente al numero 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 numero de orden y el numero de historia son usualmente diferentes:
el numero de historia de una orden es su posicion en la lista de
historia, que puede incluir ordenes restauradas desde el fichero de
historia (vea HISTORIA mas abajo), mientras que el numero de orden es
la posicion en la secuencia de ordenes ejecutadas durante la sesion de
shell actual. Despues de que la cadena es descodificada, se expande
mediante la expansion de parametros, sustitucion de ordenes, expansion
aritmetica, expansion de cadena, y eliminacion de comillas, sujeta al
valor de la opcion del shell promptvars (vea la descripcion de la orden
shopt bajo 'ORDENES INTERNAS DEL SHELL mas adelante).
READLINE
Readline (leer linea) es la biblioteca que maneja la lectura de la
entrada cuando se usa un shell interactivo, a menos que se haya dado la
opcion --noediting cuando se llamo. De forma predeterminada, las
ordenes de edicion de la linea son similares a las de emacs. Tambien
se dispone de una interfaz de edicion de lineas al estilo de vi. Para
desactivar la edicion de lineas una vez que el shell esta en ejecucion,
use las opciones +o emacs o +o vi de la orden interna set (vea 'ORDENES
INTERNAS DEL SHELL abajo).
Notaci'on de Readline
En esta seccion, se emplea la notacion al estilo de emacs para denotar
las teclas. Las teclas de control se representan por medio de C-tecla;
asi, 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 combinacion 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 ordenes de readline pueden recibir argumentos numericos que actuan
normalmente como un numero de repeticion. Algunas veces, empero, lo
que tiene significado es el signo del argumento. Pasar un argumento
negativo a una orden que actua en la direccion adelante (p. ej.,
kill-line) hace que esa orden actue en la direccion contraria, hacia
atras. Las ordenes cuyo comportamiento con argumentos se desvie de
esto se senalan mas adelante.
Cuando una orden se describe como que corta texto, el texto borrado se
guarda para una posible futura recuperacion (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 ordenes que no cortan texto separan los trozos de texto en el
anillo de corte.
Inicio de Readline
Readline se personaliza poniendo ordenes 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 esta 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. Solo se permiten
unas pocas construcciones basicas en el fichero de inicio de readline.
Las lineas en blanco no se tienen en cuenta. Las lineas que comiencen
con un # son comentarios. Las lineas que comiencen con un $ indican
construcciones condicionales. Otras lineas 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
anadir sus propias ordenes y definiciones.
Por ejemplo, el poner
M-Control-u: universal-argument
o
C-Meta-u: universal-argument
dentro del fichero inputrc haria que M-C-u ejecutara la orden de
readline universal-argument.
Se reconocen los siguientes nombres simbolicos de caracteres: RUBOUT,
DEL, ESC, LFD, NEWLINE, RET, RETURN, SPC, SPACE, y TAB. Ademas de los
nombres de ordenes, 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 simbolico de tecla, posiblemente con prefijos Meta- o Control-,
o como una secuencia de teclas. Cuando se use la forma nombre-
tecla:nombre-funci'on o macro, nombre-tecla es el nombre de una tecla en
ingles. 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 funcion universal-argument,
M-DEL se vincula a la funcion 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 linea).
En la segunda forma, "sectecla":nombre-funci'on 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. Asi 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 Funcion 1"
En este ejemplo, C-u se enlaza de nuevo a la funcion
universal-argument. C-x C-r se vincula a la funcion re-read-init-file,
y ESC [ 1 1 ~ se define como que se inserte el texto Tecla de Funci'on
1. El conjunto completo de las secuencias de escape al estilo de GNU
Emacs es
\C- prefijo de control
\M- prefijo meta
\e un caracter de Escape
\\ barra inclinada inversa
\" una " literal
\' un ' literal
Ademas 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 atras
\d borrado
\f salto de pagina
\n salto de linea
\r retorno de carro
\t tabulador horizontal
\v tabulador vertical
\nnn el caracter cuyo codigo es el valor octal nnn (de 1 a 3
digitos)
\xnnn el caracter cuyo codigo es el valor hexadecimal nnn (de 1
a 3 digitos)
Cuando se mete el texto de una macro, se deben emplear comillas simples
o dobles para indicar una definicion de macro. El texto no
entrecomillado se supone un nombre de funcion. En el cuerpo de la
macro, los escapes con barra inversa de arriba se expanden. La barra
inversa protegera a cualquier otro caracter 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 edicion puede cambiarse
durante una sesion interactiva empleando la opcion -o de la orden
interna set (vea 'ORDENES INTERNAS DEL SHELL abajo).
Variables de Readline
Readline tiene variables que se pueden usar para personalizar mas aun
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 que 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 esta
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 esta 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 terminacion
de nombres de ficheros sin importar si las letras son mayusculas
o minusculas.
completion-query-items (100)
Esto determina cuando se pregunta al usuario si quiere ver el
numero de terminaciones posibles generadas por la orden
possible-completions. Puede ponerse a cualquier valor entero
mayor o igual a cero. Si el numero 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 convertira caracteres con el octavo
bit a uno a una secuencia de teclas ASCII poniendo el octavo bit
a cero y prefijando un caracter Esc (en efecto, usando Esc como
el prefijo meta).
disable-completion (Off)
Si se pone a On, readline inhibira la terminacion de palabras.
Los caracteres para la terminacion se insertaran en la linea
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 intentara 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 expansion de tilde se realiza cuando
readline intenta la terminacion de palabras.
horizontal-scroll-mode (Off)
Cuando se pone a On, esto hace que readline use una sola linea
para pantalla, haciendo rodar la entrada horizontalmente en una
sola linea de la pantalla cuando esta es mas larga que la
anchura de la pantalla; en lugar de seguir en la linea
siguiente.
input-meta (Off)
Si se pone a On, readline habilitara la entrada de 8 bits (esto
es, no pondra 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 sinonimo para esta variable.
keymap (emacs)
Establece el mapa de teclado actual para readline. El conjunto
de nombres de mapas de teclado validos 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
tambien afecta al mapa de teclado predeterminado.
mark-directories (On)
Si se pone a On, los nombres de directorios completados tendran
una barra inclinada anadida al final.
mark-modified-lines (Off)
Si se pone a On, las lineas de historia que hayan sido
modificadas se muestran con un asterisco precediendolas (*).
output-meta (Off)
Si se pone a On, readline mostrara 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 mostrara terminaciones con
concordancias clasificadas horizontalmente en orden alfabetico,
en vez de verticalmente.
show-all-if-ambiguous (Off)
Esto altera el comportamiento predeterminado de las funciones de
terminacion. Si se pone a on, las palabras que tienen mas de una
posible terminacion 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 anade un caracter que represente un tipo de
fichero segun lo que devuelve stat(2) cuando se listan las
terminaciones posibles.
Construcciones condicionales de Readline
Readline implementa una facilidad similar en espiritu a las
caracteristicas de compilacion condicional del preprocesador de C que
permite que las definiciones de teclas y variables se realicen en
funcion de pruebas o condiciones. Hay cuatro directivas del analizador
que se usan.
$if La construccion $if permite que las definiciones se hagan segun
el modo de edicion, la terminal en uso, o la aplicacion que haga
uso de readline. El texto de la condicion se extiende hasta el
final de la linea; no se requieren caracteres para aislarla.
mode La forma mode= de la directiva $if se usa para ver si
readline esta en modo emacs o vi. Esto se puede emplear
en conjuncion con la orden set keymap, por ejemplo, para
poner el teclado en los mapas emacs-standard y emacs-ctlx
solo si readline esta arrancando en modo emacs.
term La forma term= puede emplearse para incluir definiciones
de teclas especificas de una terminal determinada, quizas
para enlazar las secuencias de teclas generadas por las
teclas de funcion de la terminal. La palabra en la parte
derecha del = se prueba contra el nombre completo de la
terminal y contra la porcion del nombre de la terminal
antes del primer -. Esto permite que sun concuerde con
sun y con sun-cmd, por ejemplo.
application
La construccion application se emplea para incluir
definiciones especificas de la aplicacion. Cada programa
que usa la biblioteca readline define el nombre de la
aplicaci'on, y en un fichero de arranque se puede
comprobar si existe un valor en particular. Esto se
podria emplear para enlazar secuencias de teclas a
funciones utiles para un programa especifico. Por
ejemplo, la orden siguiente anade 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 ordenes en esta rama de la directiva $if se ejecutan si la
comprobacion falla.
$include
Esta directiva toma como argumento un solo nombre de fichero y
lee ordenes y definiciones de ese fichero. Por ejemplo, la
siguiente directiva leeria de /etc/inputrc:
$include /etc/inputrc
B'usquedas
Readline proporciona ordenes para buscar a traves de la historia de
ordenes (vea HISTORIA abajo) lineas que contengan una cadena
especificada. Hay dos modos de busqueda: incremental y no incremental.
La busqueda incremental comienza antes de que el usuario haya acabado
de teclear la cadena a buscar. Tan pronto como se teclea cada caracter
de la cadena de busqueda, readline muestra la siguiente entrada de la
historia que concuerde con la cadena que se este tecleando hasta este
punto. Una busqueda incremental requiere solamente tantos caracteres
como se necesiten para encontrar la entrada deseada en la lista de
historia. El caracter Escape se emplea para terminar una busqueda
incremental. Control-J tambien dara por terminada la busqueda.
Control-G parara abruptamente una busqueda incremental y restaurara la
linea original. Cuando la busqueda se termine, la entrada de la
historia que contuviera la cadena de busqueda se convierte en la linea
en curso. Para encontrar otras entradas en la lista de historia,
teclee Control-S o Control-R, segun sea apropiado. Esto buscara hacia
atras o adelante en la historia la siguiente entrada concordante con
la cadena de busqueda tecleada hasta este punto. Cualquier otra
secuencia de teclas asociada a una orden de readline terminara la
busqueda y ejecutara esa orden. Por ejemplo, una nueva-l'inea terminara
la busqueda y aceptara la linea, ejecutando de ese modo la orden de la
lista de historia.
Las busquedas no incrementales leen la cadena de busqueda entera antes
de empezar a buscar en las lineas de la lista de historia. La cadena de
busqueda puede ser tecleada por el usuario o ser parte de los
contenidos de la linea en curso.
Nombres de 'ordenes de Readline
Lo siguiente es una lista de los nombres de las ordenes y las
secuencias de teclas predeterminadas a las que estan asociadas. Los
nombres de ordenes sin una secuencia de tecla acompanante pertenecen a
ordenes que no estan asociadas a ninguna secuencia de teclas de forma
predeterminada.
'Ordenes para el movimiento
beginning-of-line (C-a)
Mover al principio de la linea en curso.
end-of-line (C-e)
Mover al final de la linea.
forward-char (C-f)
Mover un caracter hacia adelante.
backward-char (C-b)
Mover un caracter hacia atras.
forward-word (M-f)
Mover adelante hasta el final de la siguiente palabra. Las
palabras se componen de caracteres alfanumericos (letras y
digitos).
backward-word (M-b)
Mover atras hasta el principio de esta palabra o la anterior.
Las palabras se componen de caracteres alfanumericos (letras y
digitos).
clear-screen (C-l)
Limpiar la pantalla dejando la linea en curso al principio de la
pantalla. Con un argumento, refresca la linea en curso sin
borrar la pantalla.
redraw-current-line
Refrescar la linea en curso.
'Ordenes para manipular la lista de historia
accept-line (Nueva-l'inea, Intro)
Aceptar la linea sin importar donde este el cursor. Si esta
linea no esta vacia, anadirla a la lista de historia de acuerdo
con el estado de la variable HISTCONTROL. Si la linea es una de
las de la historia, modificada, entonces restaurar la linea de
la historia a su estado original.
previous-history (C-p)
Obtener la orden anterior de la lista de historia, moviendose
hacia atras en ella.
next-history (C-n)
Obtener la orden siguiente de la lista de historia, moviendose
hacia delante en ella.
beginning-of-history (M-<)
Mover a la primera linea de la lista de historia.
end-of-history (M->)
Mover al final de la historia de entrada; esto es, la linea que
esta siendo introducida en la actualidad.
reverse-search-history (C-r)
Buscar hacia atras empezando en la linea en curso y moviendose
`arriba' a traves de la lista de historia si es necesario. Esta
busqueda es incremental.
forward-search-history (C-s)
Buscar hacia adelante empezando en la linea en curso y
moviendose `abajo' a traves de la lista de historia si es
necesario. Esta busqueda es incremental.
non-incremental-reverse-search-history (M-p)
Buscar hacia atras a traves de la lista de historia empezando en
la linea en curso empleando una busqueda no incremental de una
cadena suministrada por el usuario.
non-incremental-forward-search-history (M-n)
Buscar hacia delante a traves de la lista de historia empezando
en la linea en curso empleando una busqueda no incremental de
una cadena suministrada por el usuario.
history-search-forward
Buscar hacia delante a traves de la lista de historia una cadena
de caracteres entre el comienzo de la linea en curso y la
posicion actual del cursor (el punto). Esta busqueda no es
incremental.
history-search-backward
Buscar hacia atras a traves de la lista de historia una cadena
de caracteres entre el comienzo de la linea en curso y la
posicion actual del cursor (el punto). Esta busqueda no es
incremental.
yank-nth-arg (M-C-y)
Insertar el primer argumento de la orden anterior (normalmente
la segunda palabra de la linea previa) en el punto (la posicion
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 ultimo argumento de la orden anterior (la ultima
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 atras en la lista de
historia, insertando cada vez el ultimo argumento de cada linea.
shell-expand-line (M-C-e)
Expandir la linea como hace el shell. Esto realiza la expansion
de alias y de historia asi como todas las expansiones de palabra
del shell. Vea EXPANSI'ON DE HISTORIA abajo para una descripcion
de la expansion de historia.
history-expand-line (M-^)
Realizar la expansion de historia en la linea en curso. Vea
EXPANSI'ON DE HISTORIA abajo para una descripcion de la expansion
de historia.
magic-space
Efectuar la expansion de historia en la linea en curso e
insertar un espacio. Vea EXPANSI'ON DE HISTORIA abajo para una
descripcion de la expansion de historia.
alias-expand-line
Realizar la expansion de alias en la linea en curso. Vea ALIAS
arriba para una descripcion de la expansion de alias.
history-and-alias-expand-line
Realizar la expansion de historia y alias en la linea en curso.
insert-last-argument (M-., M-_)
Un sinonimo para yank-last-arg.
operate-and-get-next (C-o)
Aceptar la linea en curso para la ejecucion y obtener la linea
siguiente relativa a la actual desde la lista de historia, para
la edicion. Cualquier argumento no se tiene en cuenta.
'Ordenes para cambiar el texto
delete-char (C-d)
Borrar el caracter bajo el cursor. Si el punto esta al principio
de la linea, no hay caracteres en la linea, y el ultimo caracter
tecleado no estaba asociado a delete-char, entonces devolver
EOF.
backward-delete-char (<X], DEL)
Borrar el caracter tras el cursor. Cuando se da un argumento
numerico, guardar el texto borrado en el anillo de corte.
quoted-insert (C-q, C-v)
Anadir el siguiente caracter tecleado a la linea tal cual. Asi
es como se pueden insertar caracteres como C-q, por ejemplo.
tab-insert (C-v TAB)
Insertar un caracter de tabulacion.
self-insert (a, b, A, 1, !, ...)
Insertar el caracter tecleado.
transpose-chars (C-t)
Arrastrar el caracter antes del punto hacia adelante sobre el
caracter en el punto. El punto se mueve adelante tambien. Si el
punto esta al final de la linea, 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 tambien sobre esa
palabra.
upcase-word (M-u)
Poner en mayusculas 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 minusculas 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 mayuscula 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 posicion actual del cursor hasta el
final de la linea.
backward-kill-line (C-x DEL)
Cortar hacia atras hasta el principio de la linea.
unix-line-discard (C-u)
Cortar hacia atras desde el punto hasta el principio de la
linea. El texto cortado se guarda en el anillo de corte.
kill-whole-line
Cortar todos los caracteres de la linea en curso, sin importar
donde este 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 limite 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 (posicion registrada
del cursor). Este texto se conoce como la regi'on.
copy-region-as-kill
Copiar el texto en la region al anillo de corte.
copy-backward-word
Copiar la palabra antes del punto al bufer de corte. Los
extremos de palabras son los mismos que con backward-word.
copy-forward-word
Copiar la palabra que sigue al punto al bufer 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 bufer en donde este el
cursor.
yank-pop (M-y)
Rotar en el anillo de corte, y pegar la nueva cima. Solo
funciona tras un yank o yank-pop.
Argumentos num'ericos
digit-argument (M-0, M-1, ..., M--)
Anadir este digito al argumento, acumulandolo, o comenzar con un
nuevo argumento. M-- empieza un argumento negativo.
universal-argument
Esta es otra forma de especificar un argumento. Si esta orden
se hace seguir de uno o mas digitos, opcionalmente con un signo
menos inicial, estos digitos definen el argumento. Si a la
orden siguen digitos, ejecutar de nuevo universal-argument
finaliza el argumento numerico, pero si no, no se tiene en
cuenta. Como un caso especial, si a esta orden sigue
inmediatamente un caracter que no es ni un digito ni un signo
menos, el numero del argumento para la siguiente orden se
multiplica por cuatro. El numero del argumento es inicialmente
uno, asi que ejecutar esta funcion por primera vez hace que el
numero del argumento sea cuatro, una segunda vez lo hace
dieciseis, y asi sucesivamente.
Terminaci'on
complete (TAB)
Intentar realizar una terminacion del texto antes del punto.
Bash intenta la terminacion 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 anfitrion (si
el texto comienza con @), o como una orden (incluyendo alias y
funciones), por este orden. Si nada de esto concuerda, se
intenta la terminacion 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
habrian 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 ejecucion 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 atras
en la lista. Esta orden esta pensada para ser asociada a TAB,
pero no esta asociada a ninguna tecla de forma predeterminada.
complete-filename (M-/)
Intentar la terminacion 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,
tratandolo como un nombre de fichero.
complete-username (M-~)
Intentar la terminacion del texto antes del punto, tratandolo
como un nombre de usuario.
possible-username-completions (C-x ~)
Listar las posibles terminaciones del texto antes del punto,
tratandolo como un nombre de usuario.
complete-variable (M-$)
Intentar la terminacion del texto antes del punto, tratandolo
como una variable del shell.
possible-variable-completions (C-x $)
Listar las posibles terminaciones del texto antes del punto,
tratandolo como una variable del shell.
complete-hostname (M-@)
Intentar la terminacion del texto antes del punto, tratandolo
como un nombre de computador anfitrion.
possible-hostname-completions (C-x @)
Listar las posibles terminaciones del texto antes del punto,
tratandolo como un nombre de computador anfitrion.
complete-command (M-!)
Intentar la terminacion del texto antes del punto, tratandolo
como un nombre de orden. La terminacion de orden intenta hacer
concordar el texto con alias, palabras reservadas, funciones del
shell, ordenes 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,
tratandolo como un nombre de orden.
dynamic-complete-history (M-TAB)
Intentar la terminacion del texto antes del punto, comparando el
texto con lineas de la lista de historia buscando concordancias
para la terminacion.
complete-into-braces (M-{)
Efectuar la terminacion de nombres de ficheros y devolver la
lista de terminaciones posibles encerrada entre llaves de forma
que la lista este disponible al shell (vea Expansi'on 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 definicion.
call-last-kbd-macro (C-x e)
Reejecutar la ultima macro de teclado definida, haciendo que los
caracteres en la macro aparezcan como si se hubieran pulsado en
el teclado.
Miscel'anea
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 el.
abort (C-g)
Terminar abruptamente la orden de edicion en curso y tocar el
pito de la terminal (segun el establecimiento de bell-style).
do-uppercase-version (M-a, M-b, M-x, ...)
Si el caracter meta x esta en minuscula, ejecutar la orden que
este asociada al caracter correspondiente en mayuscula.
prefix-meta (ESC)
Convertir en meta el siguiente caracter tecleado. ESC f es
equivalente a Meta-f.
undo (C-_, C-x C-u)
Deshacer de forma incremental, recordado separadamente para cada
linea.
revert-line (M-r)
Deshacer todos los cambios hechos a esta linea. Esto es como
ejecutar la orden undo las veces suficientes como para devolver
la linea a su estado inicial.
tilde-expand (M-~)
Efectuar la expansion de tilde en la palabra en curso.
set-mark (C-@, M-<espacio>)
Establecer la marca en el punto actual. Si se da un argumento
numerico, la marca se establece en esa posicion.
exchange-point-and-mark (C-x C-x)
Cambia el punto con la marca. La posicion actual del cursor se
pone en la posicion guardada, y la vieja posicion del cursor se
guarda como la marca.
character-search (C-])
Se lee un caracter y el punto se mueve a la siguiente ocurrencia
de ese caracter. Un argumento numerico negativo hace que la
busqueda sea de las ocurrencias anteriores.
character-search-backward (M-C-])
Se lee un caracter y el punto se mueve a la anterior ocurrencia
de ese caracter. Un argumento numerico negativo hace que la
busqueda sea de las ocurrencias siguientes.
insert-comment (M-#)
El valor de la variable de readline comment-begin se inserta al
principio de la linea en curso, y la linea se acepta como si se
hubiera tecleado Intro (nueva-linea). Esto convierte la linea en
curso en un comentario del shell.
glob-expand-word (C-x *)
La palabra antes del punto se trata como un patron para la
expansion 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 habrian sido generadas por
glob-expand-word y redibujar la linea.
dump-functions
Mostrar todas las funciones y sus asociaciones de teclas en el
flujo de salida de readline. Si se da un argumento numerico, 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 estos, en el flujo de salida de readline. Si
se da un argumento numerico, 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 numerico, la salida se formatea de tal
manera que pueda formar parte de un fichero inputrc.
display-shell-version (C-x C-v)
Mostrar informacion de version acerca de la instancia actual de
bash.
HISTORIA
Cuando se habilita la opcion -o history de la orden interna set, el
shell da acceso a la historia de 'ordenes, la lista de ordenes tecleadas
con anterioridad. El texto de los ultimos HISTSIZE mandatos (por
omision, 500) se guarda en una lista de historia. El shell almacena
cada orden en la lista de historia antes de la expansion de parametros
y variables (vea EXPANSI'ON arriba) pero tras efectuar la expansion 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 omision ~/.bash_history).
HISTFILE se trunca, si es necesario, para contener no mas de
HISTFILESIZE lineas. Cuando un shell interactivo termina, las ultimas
HISTSIZE lineas se copian de la lista de historia a HISTFILE. Si la
opcion del shell histappend esta activa (vea la descripcion de shopt
bajo 'ORDENES INTERNAS DEL SHELL mas adelante), las lineas se anaden al
fichero de historia; si no, el fichero de historia se sobreescribe. Si
HISTFILE no esta 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 mas de HISTFILESIZE
lineas. Si HISTFILESIZE no esta definido, no se trunca.
La orden interna fc (vea 'ORDENES INTERNAS DEL SHELL abajo) puede
emplearse para listar o editar y re-ejecutar una porcion 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 edicion de lineas de ordenes, estan disponibles las
ordenes de busqueda en cada modo de edicion que proporcionan acceso a
la lista de historia.
El shell permite el control sobre que ordenes 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 ordenes
introducidas. La opcion del shell cmdhist, si esta habilitada, hace
que el shell intente guardar cada linea de una orden multi-linea en la
misma entrada de la historia, anadiendo punto y comas donde sea
necesario para preservar la correccion sintactica. La opcion del shell
lithist hace que el shell guarde la orden con saltos de linea
empotrados en vez de punto y comas. Vea la descripcion de la orden
interna shopt abajo en 'ORDENES INTERNAS DEL SHELL para informacion
sobre como establecer y anular opciones del shell.
EXPANSI'ON DE HISTORIA
El shell admite una caracteristica de expansion de historia que es
parecida a la expansion de historia en csh. Esta seccion describe que
caracteristicas sintacticas estan disponibles. Esta caracteristica esta
habilitada de forma predeterminada en shells interactivos, y puede ser
desactivada mediante la opcion +H de la orden interna set (vea 'ORDENES
INTERNAS DEL SHELL abajo). Los shells no interactivos no realizan la
expansion de la historia de forma predeterminada.
Las expansiones de historia introducen palabras desde la lista de
historia en el flujo de entrada, facilitando asi la repeticion de
ordenes, la insercion de argumentos de una orden anterior en la linea
de entrada en curso, o la correccion rapida de errores en una orden
anterior.
La expansion de historia se realiza inmediatamente tras la lectura de
una linea completa, antes de que el shell la divida en palabras. Tiene
lugar en dos fases. En la primera se determina que linea de la lista
de historia hay que emplear durante la sustitucion. En la segunda se
seleccionan porciones de esa linea para su inclusion en la actual. La
linea seleccionada desde la historia es el evento, y la porcion de esa
linea sobre la que se actua son palabras. Se dispone de varios
modificadores para manipular las palabras seleccionadas. La linea 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 aparicion del caracter de expansion de historia,
que es por omision !. Solo las barras inversas (\) y las comillas
simples pueden proteger al caracter de expansion de historia.
Se pueden emplear ciertas opciones que se ponen con la orden interna
shopt para cambiar el comportamiento de la expansion de historia. Si
la opcion del shell histverify esta activa (vea la descripcion de la
orden interna shopt), y se esta usando readline, las sustituciones de
historia no se pasan inmediatamente al analizador del shell. En vez de
eso, la linea expandida se vuelve a cargar en el bufer de edicion de
readline para una modificacion posterior. Si se esta usando readline y
la opcion del shell histreedit esta activada, una sustitucion de
historia fallida se volvera a cargar en el bufer de edicion de readline
para su correccion. La opcion -p de la orden interna history se puede
emplear para ver que hara una expansion de historia antes de usarse.
La opcion -s de la orden interna history se puede emplear para anadir
ordenes al final de la lista de historia sin ejecutarlas realmente, de
modo que esten disponibles para rellamadas posteriores.
El shell permite el control de los diversos caracteres empleados por el
mecanismo de expansion de historia (vea la descripcion de histchars
arriba en Variables del shell).
Designadores de eventos
Un designador de evento es una referencia a una entrada de linea de
orden en la lista de historia.
! Comenzar una sustitucion de historia, excepto cuando le siga un
blanco, salto de linea, = o (.
!n Referirse a la linea de ordenes numero n.
!-n Referirse a la linea de orden en curso menos n.
!! Referirse a la orden anterior. Esto es lo mismo que `!-1'.
!cadena
Referirse a la orden mas reciente que comience con cadena.
!?cadena[?]
Referirse a la orden mas reciente que contenga cadena. El ? del
final puede omitirse si a cadena le sigue inmediatamente un
salto de linea.
^cadena1^cadena2^
Sustitucion rapida. Repetir la ultima orden, reemplazando
cadena1 con cadena2. Equivalente a ``!!:s/cadena1/cadena2/''
(vea Modificadores abajo).
!# La linea 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 especificacion 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 linea, con la primera palabra denotada por 0 (cero).
Las palabras se insertan en la linea en curso separadas por espacios
simples.
0 (cero)
La palabra numero 0. Para el shell, esta es la palabra de la
orden.
n La n-sima palabra.
^ El primer argumento. Esto es, la palabra numero 1.
$ El ultimo argumento.
% La palabra que concordaba con la mas reciente busqueda con
`?cadena?'.
x-y Un rango de palabras; `-y' abrevia `0-y'.
* Todas las palabras menos la numero cero. Esto es un sinonimo de
`1-$'. No es un error emplear * si solo hay una palabra en el
evento; en este caso se devuelve la cadena vacia.
x* Abreviatura de x-$.
x- Abrevia x-$ como x*, pero omite la ultima palabra.
Si se suministra un designador de palabra sin una especificacion de
evento, se usa la orden anterior como el evento.
Modificadores
Tras el designador opcional de palabra, puede haber una secuencia de
uno o mas de los siguientes modificadores, precedido cada uno por un
`:'.
h Quitar un componente final de nombre de fichero, dejando solo la
parte izquierda.
t Quitar todos los primeros componentes de un nombre de fichero,
dejando la ultima 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 linea.
s/viejo/nuevo/
Substituir nuevo por la primera ocurrencia de viejo en la linea
de evento. Se puede emplear cualquier delimitador en vez de /.
El delimitador final es opcional si es el ultimo caracter de la
linea 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 protegera
el &. Si viejo esta vacio, se pone al ultimo viejo substituido,
o, si no tuvo lugar ninguna sustitucion de historia previa, a la
ultima cadena en una busqueda del tipo !?cadena[?].
& Repetir la sustitucion anterior.
g Hace que los cambios se apliquen sobre la linea entera de
evento. Esto se emplea en conjuncion 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 ultimo caracter de la linea de
evento.
'ORDENES INTERNAS DEL SHELL
A menos que se diga otra cosa, cada orden interna documentada en esta
seccion que acepte opciones precedidas por - tambien acepta -- para
significar el final de las opciones.
: [argumentos]
Sin efecto; la orden no hace nada mas que expandir argumentos y
realizar cualquier redireccion que se haya especificado. Se
devuelve un codigo de salida cero.
. nombre-fichero [argumentos]
source nombre-fichero [argumentos]
Lee y ejecuta ordenes desde nombre-fichero en el entorno actual
del shell y devuelve el estado de salida de la ultima 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 encontro el fichero
en PATH. Si la opcion sourcepath de la orden interna shopt esta
desactivada, la busqueda en PATH no se realiza. Si se
suministran argumentos, se convierten en los parametros
posicionales cuando se ejecuta nombre-fichero. Si no, los
parametros posicionales permanecen inalterados. El estado de
retorno es el de la ultima orden de dentro del guion (0 si no se
ejecuto ninguna orden), y `falso' si nombre-fichero no se
encontro o no se pudo leer.
alias [-p] [nombre[=valor] ...]
Alias sin argumentos o con la opcion -p muestra la lista de
alias en la forma alias nombre=valor en la salida estandar.
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 sustitucion 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 de
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 esta presente,
se emplea la nocion que tiene el shell del trabajo en curso. bg
espectrab devuelve 0 a menos que se ejecute cuando el control de
trabajos este deshabilitado, o cuando se ejecute con el control
de trabajos habilitado si espectrab no se encontro, o cuando se
hubo arrancado sin control de trabajos.
bind [-m mapatecl] [-lpsvPSV]
bind [-m mapatecl] [-q funci'on] [-u funci'on] [-r sectecl]
bind [-m mapatecl] -f nombre-fichero
bind [-m mapatecl] sectecl:nombre-funci'on
Muestra las asociaciones actuales de readline de teclas y
funciones, o asocia una secuencia de teclas a una funcion o
macro de readline. La sintaxis aceptada es identica a la de
.inputrc, pero cada asociacion 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 leidas.
-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 leidas.
-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 leidas 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 funci'on
Pregunta que teclas llaman a la funci'on especificada.
-u funci'on
Desenlaza todas las teclas asociadas a la funci'on
nombrada.
-r sectecl
Borra cualquier asociacion actual de sectecl.
El valor devuelto es 0 a menos que se de una opcion 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
numero de bucles, se sale de todos. El valor devuelto es 0 a
menos que el shell no este ejecutando un bucle cuando se ejecute
break.
builtin orden-interna [argumentos]
Ejecuta la orden interna del shell especificada, pasandole los
argumentos, y devuelve su estado de salida. Esto es util cuando
se define una funcion cuyo nombre es el mismo que una orden
interna del shell, reteniendo la funcionalidad de esa orden
interna dentro de la funcion. 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 busqueda del directorio que
contenga dir. Los nombres de directorios alternativos en CDPATH
se separan por dos puntos (:). Un nombre de directorio vacio 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 opcion -P dice que se va a emplear la
estructura fisica de directorios en vez de seguir enlaces
simbolicos (vea tambien la opcion -P de la orden interna set);
la opcion -L hace que se sigan siempre los enlaces simbolicos.
El argumento - es equivalente a $OLDPWD. El valor de retorno es
`verdad' si el directorio de trabajo se cambio con exito;
`falso' en otro caso.
command [-pVv] orden [arg ...]
Ejecuta orden con args suprimiendo la busqueda normal de
funciones del shell. Solo se ejecutaran ordenes incorporadas en
el shell o programas encontrados en la variable PATH. Si se da
la opcion -p, se busca la orden empleandose un valor
predeterminado para PATH que garantiza encontrar todas las
utilidades estandar del sistema. Si se da la opcion -V o la -v,
se muestra una descripcion de orden. La opcion -v muestra una
sola palabra que indica la orden o nombre de fichero ejecutable
empleado para la llamada a orden; la opcion -V produce una
descripcion algo mas prolija. Si se dan las opciones -V o -v,
el estado de salida es 0 si orden se encontro, y 1 si no. Si no
se da ninguna de las dos opciones y ocurrio un error u orden no
se encontro, 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 iteracion del bucle for, while, until, o
select donde estamos. Si se especifica n, la reanudacion es en
el n-simo bucle que nos rodea. n debe ser >= 1. Si n es mayor
que el numero de bucles que nos rodean, se reanuda el bucle mas
exterior (el de ``mas alto nivel''). El valor de retorno es 0 a
menos que el shell no este 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 opcion -p
mostrara los atributos y valores de cada nombre. Cuando se
emplee -p, otras opciones que se hayan dado no se tienen en
cuenta. La opcion -F inhibe la presentacion de las definiciones
de funciones; solo se muestran sus nombres y atributos. La
opcion -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
evaluacion aritmetica (vea EVALUACI'ON ARITM'ETICA) 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
definicion con unset.
-x Marca nombres para la exportacion a ordenes subsecuentes
a traves del entorno.
Usar `+' en vez de `-' desactiva el atributo en vez de
activarlo, con la excepcion de que no puede emplearse +a para
destruir una variable vector. Cuando se usa en una funcion, hace
local cada nombre, como con la orden interna local. El valor de
retorno es 0 a menos que se encuentre una opcion invalida, se
intente definir una funcion 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 asignacion compuesta (vea Vectores arriba), uno de los
nombres no sea un nombre valido de variable del shell, se
intente desactivar el estado de lectura exclusiva para una
variable de solo lectura, se intente desactivar el estado de
vector para una variable vector, o se intente mostrar una
funcion 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 linea con los nombres de directorios separados por
espacios. Los directorios se anaden 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 mas largo; el formato predeterminado
de listado emplea una tilde de la ene para senalar el
directorio inicial de trabajo (el "hogar").
-p Muestra la pila de directorios con una entrada por cada
linea.
-v Muestra la pila de directorios con una entrada por linea,
prefijando cada entrada con su indice en la pila.
El valor de retorno es 0 a menos que se de una opcion invalida o
que n indexe mas alla 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 opcion -h, cada espectrab no se quita de
la tabla, sino que se marca de manera que no se le enviara la
senal SIGHUP si el shell recibe una senal SIGHUP. Si no hay
ningun espectrab presente, y ni se dan las opciones -a ni -r, se
utiliza el trabajo en curso. Si no se suministra espectrab, la
opcion -a significa quitar o marcar todos los trabajos; la
opcion -r sin un argumento espectrab restringe la operacion a
los trabajos en ejecucion. El valor de retorno es 0 a menos que
espectrab no se refiera a un trabajo valido.
echo [-neE] [arg ...]
Repite los args, separados por espacios, seguidos por un salto
de linea. El estado de retorno es siempre 0. Si se especifica
-n, se suprime el salto de linea final. Si se da la opcion -e,
se activa la interpretacion de los siguientes caracteres de
escape (con barra inversa). La opcion -E desactiva la
interpretacion 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 atras
\c suprime el salto de linea final
\e un caracter Escape
\f salto de pagina
\n nueva linea
\r retorno de carro
\t tabulador horizontal
\v tabulador vertical
\\ barra inclinada invertida
\nnn el caracter cuyo codigo es el valor octal nnn (de uno a
tres digitos)
\xnnn el caracter cuyo codigo es el valor hexadecimal nnn (de
uno a tres digitos)
enable [-adnps] [-f nombre-fichero] [nombre ...]
Activa y desactiva ordenes internas incorporadas en el shell.
Desactivar una orden incorporada en el shell permite que un
programa cuya imagen ejecutable este en el disco con el mismo
nombre, se ejecute sin tener que especificar un camino completo,
aun cuando el shell normalmente busca las ordenes internas antes
que las ordenes 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
version incorporada en el shell, ejecute enable -n test. La
opcion -f significa cargar la nueva orden incorporada nombre
desde el objeto compartido nombre-fichero, en sistemas que
admiten la carga dinamica. La opcion -d borrara una orden
interna cargada previamente con -f. Si no se dan argumentos
nombre, o si se da la opcion -p, se muestra una lista de ordenes
internas del shell. Sin ninguna opcion mas, la lista consiste
en todas las ordenes internas activas. Si se da -n, solo se
muestran las ordenes desactivadas. Si se da -a, la lista
impresa incluye todas las ordenes internas, con una indicacion
en cada una de si esta activada o no. Si se da -s, la salida se
restringe a las ordenes 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 vacios, eval devuelve 0.
exec [-cl] [-a nombre] [orden [argumentos]]
Si se especifica orden, reemplaza al shell. No se crea ningun
proceso nuevo. Los argumentos se convierten en los argumentos de
orden. Si se da la opcion -l, el shell pone un guion en el
argumento numero cero pasado a orden. Esto es lo que hace
login(1). La opcion -c hace que orden se ejecute con un entorno
vacio. Si se da -a , el shell pasa nombre como el argumento
numero cero de la orden ejecutada. Si orden no puede ejecutarse
por alguna razon, un shell no interactivo se acaba, a menos que
se haya activado la opcion 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 redireccion tiene efecto en el shell en curso, y el
estado devuelto es 0. Si hay un error de redireccion, 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 ultima 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 exportacion automatica
al entorno de ordenes que se ejecuten de ahi en adelante. Si la
opcion -f se da, los nombres se referiran a funciones. Si no se
dan nombres, o si se da la opcion -p, se muestra una lista de
todos los nombres que estan exportados en este shell. La opcion
-n hace que la propiedad de exportacion 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
opcion invalida, uno de los nombres no sea un nombre valido de
variable del shell, o que se de -f no siendo nombre una funcion.
fc [-e editor] [-nlr] [primero] ['ultimo]
fc -s [pat=rep] [ord]
Corrige orden (Fix Command). En la primera forma, se selecciona
un rango de ordenes desde primero hasta 'ultimo de la lista de
historia. Primero y 'ultimo pueden especificarse como una cadena
de caracteres (para localizar la ultima orden que empezara con
esa cadena) o como un numero (un indice en la lista de historia,
donde un numero negativo se emplea como un desplazamiento a
partir del numero de orden actual). Si no se da 'ultimo, se pone
a la orden en curso para un listado (de forma que fc -l -10
muestra las 10 ultimas ordenes) o a primero en otro caso. Si no
se especifica primero, se pone a la orden previa para una
edicion y a -16 para un listado.
La opcion -n suprime los numeros de orden en un listado. La
opcion -r invierte el orden de los mandatos. Si se da la opcion
-l , las ordenes se listan en la salida estandar. Si no, se
llama al editor dado por editor en un fichero conteniendo esas
ordenes. Si no se da editor, se emplea el valor de la variable
FCEDIT, o el valor de EDITOR si FCEDIT no esta definido. Si no
esta definida ni una variable ni otra, vi es el editor que se
empleara. Cuando la edicion se haya completado, las ordenes
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 ultima orden que empezara con ``cc'' y que al teclear
``r'' se re-ejecute la ultima orden.
Si se usa la primera forma, el valor de retorno es 0 a menos que
se encuentre una opcion invalida o que primero o 'ultimo
especifiquen lineas de historia fuera de rango. Si se
suministra la opcion -e, el valor de retorno es el de la ultima
orden ejecutada, o `fallo' si ocurre un error con el fichero
temporal de ordenes. Si se emplea la segunda forma, el estado de
retorno es de la orden reejecutada, a menos que ord no
especifique una linea valida 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 esta presente, se usa la nocion 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 esta desactivado o, cuando se
ejecuta con el control de trabajos activado, si espectrab no
especifica un trabajo valido o espectrab se refiere a una
trabajo que se arranco sin control de trabajos.
getopts cadenaopcs nombre [args]
getopts se usa en procedimientos del shell para analizar los
parametros posicionales. cadenaopcs contiene las letras de
opcion que se reconoceran; si a una letra le sigue un signo de
dos puntos, se espera que la opcion tenga un argumento, que
deberia estar separado de ella por espacio en blanco. Cada vez
que se llama, getopts pone la siguiente opcion en la variable
del shell nombre, inicializando nombre si no existe, y el indice
del siguiente argumento a ser procesado en la variable OPTIND.
OPTIND se inicializa a 1 cada vez que se llama al shell o al
guion del shell. Cuando una opcion requiera un argumento,
getopts pone ese argumento en la variable OPTARG. El shell no
pone a cero OPTIND automaticamente; debe ser puesto a cero
manualmente entre llamadas multiples a getopts dentro de la
misma llamada al shell si hubiera que usar un nuevo conjunto de
parametros.
Cuando se encuentra el fin de las opciones, getopts sale con un
valor de retorno mayor que cero. OPTIND se pone al indice del
primer argumento que no es una opcion, y nombre se pone a "?".
getopts normalmente analiza los parametros posicionales, pero si
se dan mas argumentos en args, getopts analiza aquellos en su
lugar.
getopts puede informar de errores de dos maneras. Si el primer
caracter de optstring es dos puntos, se emplea un informe de
error silencioso. En un modo normal de operacion se muestran
mensajes de diagnosticos cuando se encuentran opciones invalidas
o faltan argumentos de opciones que los requieran. Si la
variable OPTERR se pone a 0, no se mostrara ningun mensaje de
error, incluso si el primer caracter de optstring no es dos
puntos.
Si se ve una opcion invalida, 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 caracter de
opcion encontrado se pone en OPTARG y no se muestra ningun
mensaje de diagnostico.
Si no se encuentra un argumento necesario, y getopts no es
silencioso, se pone un signo de cierre de interrogacion (?) en
nombre, OPTARG se anula, y se muestra un mensaje de diagnostico.
Si getopts es silencioso, entonces se pone un signo de dos
puntos (:) en nombre y OPTARG toma el valor del caracter de
opcion encontrado.
getopts devuelve `verdad' si una opcion, 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 opcion -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 opcion -r hace que el
shell se olvide de todas las localizaciones registradas. Si no
se dan argumentos, se muestra informacion acerca de las ordenes
recordadas. El estado de salida es `verdad' a menos que un
nombre no se encuentre o se de una opcion invalida.
help [patr'on]
Muestra informacion de ayuda sobre las ordenes internas. Si se
especifica patr'on, help da ayuda detallada sobre todas las
ordenes que concuerden con patr'on; si no, se muestra ayuda para
todas las ordenes internas y estructuras de control del shell.
El estado de retorno es 0 a menos que ninguna orden concuerde
con patr'on.
history [-c] [n]
history -anrw [nombre-fichero]
history -p arg [arg ...]
history -s arg [arg ...]
Sin opciones, muestra la lista de historia de ordenes con
numeros de linea. Las lineas marcadas con un * han sido
modificadas. Un argumento de n lista solamente las ultimas n
lineas. 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 Anade las lineas de historia ``nuevas'' (las introducidas
desde el inicio de la sesion de bash en curso) al fichero
de historia.
-n Lee las lineas de historia que aun no han sido leidas del
fichero de historia y las mete en la lista de historia
actual. Estas son las lineas anadidas al fichero de
historia desde el comienzo de la sesion 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 sustitucion de historia de los siguientes args
y muestra el resultado en la salida estandar. No
almacena los resultados en el fichero de historia. Cada
arg debe protegerse para deshabilitar la expansion de
historia normal.
-s Almacena los args en la lista de historia como una sola
entrada. La ultima orden en la lista de historia se
elimina antes de que se anadan los args.
El valor de retorno es 0 a menos que se encuentre una opcion
invalida 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 ademas de la informacion normal.
-p Lista solamente el PID del lider del grupo de proceso del
trabajo.
-n Muestra informacion solamente sobre trabajos que han
cambiado de estado desde que se notifico al usuario por
ultima vez de su estado.
-r Restringe la salida a los trabajos en ejecucion.
-s Restringe la salida a los trabajos parados.
Si se da espectrab, la salida se restringe a la informacion
sobre ese trabajo. El estado de retorno es cero a menos que se
encuentre una opcion invalida o se suministre un espectrab
invalido.
Si se da la opcion -x, jobs reemplaza cualquier espectrab
encontrado en orden o args con el ID de grupo de proceso
correspondiente, y ejecuta orden pasandole args, devolviendo su
estado de salida.
kill [-s nombre-se~nal | -n numse~nal | -nombre-se~nal] [pid | espectrab]
...
kill -l [nombre-se~nal | status_salida]
Envia la senal especificada por nombre-se~nal o numse~nal a los
procesos nombrados por pid o espectrab. nombre-se~nal es o bien
un nombre de senal como SIGKILL o un numero de senal; numse~nal
es un numero de senal. Si nombre-se~nal es un nombre de senal,
este puede darse con o sin el prefijo SIG. Si nombre-se~nal no
esta presente, entonces se supone SIGTERM. Un argumento de -l
lista los nombres de senales. Si se suministran mas argumentos
cuando se da -l, se listan los nombres de las senales
correspondientes a los argumentos, y el estado de retorno es 0.
El argumento status_salida de -l es un numero que especifica o
bien un numero de senal o el estado de salida de un proceso
terminado por una senal. kill devuelve ``verdad'' si por lo
menos se envio con exito una senal, o ``falso'' si ocurrio un
error o se encontro una opcion invalida.
let arg [arg ...]
Cada arg es una expresion aritmetica a ser evaluada (vea
EVALUACI'ON ARITM'ETICA). Si el ultimo arg se evalua 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 funcion, hace que la variable nombre tenga una visibilidad
restringida a esa funcion y sus hijas. Sin operandos, local
escribe en la salida estandar una lista de las variables
locales. Es un error emplear local fuera de una funcion. El
estado de retorno es 0 a menos que local se use fuera de una
funcion, o se de un nombre invalido.
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 ultimo directorio, ``popd -1'' el
penultimo.
-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, tambien se realiza un dirs, y el
estado de retorno es 0. popd devuelve `falso' si se encuentra
una opcion invalida, la pila de directorios esta vacia, 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 estandar 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 estandar, caracteres de
secuencias de escape, que se convierten y copian en la salida
estandar, y especificaciones de formato, cada una de las cuales
causa la impresion del siguiente argumento sucesivo de una
determinada manera. Ademas de los formatos estandares 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 mas argumentos que
los que se suministran, las especificaciones de formato extra se
comportan como si se hubiera dado un valor cero o una cadena
vacia, segun lo apropiado.
pushd [-n] [dir]
pushd [-n] [+n] [-n]
Anade 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 mas arriba y devuelve 0, a menos que la pila de
directorios este vacia. 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) este 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) este en la cima.
-n Suprime el cambio normal de directorio cuando se anaden
directorios a la pila, de forma que solamente se manipula
la pila.
dir Anade dir a la pila de directorios en la cima, haciendolo
el nuevo directorio de trabajo.
Si la orden pushd acaba con exito, se realiza un dirs tambien.
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 este vacia, 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
simbolicos si se da la opcion -P o esta puesta la opcion -o
physical de la orden interna set. Si se usa la opcion -L, los
enlaces simbolicos se siguen. El estado de retorno es 0 a menos
que ocurra un error mientras se lea el nombre del directorio
actual o se de una opcion invalida.
read [-er] [-a array] [-p prompt] [nombre ...]
Se lee una linea desde la entrada estandar, y la primera palabra
se asigna al primer nombre, la segunda palabra al segundo
nombre, y asi sucesivamente, con las palabras que sobren y sus
separadores intervinientes asignadas al ultimo nombre. Si hay
menos palabras leidas de la entrada estandar que nombres, a los
sobrantes se les asignan valores vacios. Se emplean los
caracteres en IFS para dividir la linea en palabras. Las
opciones, si se dan, tienen los siguientes significados:
-r Un par formado por una barra inclinada inversa y un salto
de linea a continuacion si es tenido en cuenta, y la
barra inversa se considera parte de la linea.
-p Muestra prompt, sin un salto de linea 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 definicion de array antes de que se
asignen nuevos valores. Otros argumentos nombre no se
tienen en consideracion.
-e Si la entrada estandar viene de una terminal, se emplea
readline (vea READLINE arriba) para obtener la linea.
Si no se suministran nombres, la linea leida se asigna a la
variable REPLY. El codigo 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 opcion -f, se marcan asi las
funciones correspondientes a los nombres. La opcion -a
restringe las variables a vectores. Si no se da ningun
argumento nombre, o si se da la opcion -p, se muestra una lista
de todos los nombres de lectura exclusiva. La opcion -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 opcion invalida, uno de los nombres no sea un nombre valido
de variable del shell, o se de -f con un nombre que no es una
funcion.
return [n]
Hace que una funcion acabe y devuelva el valor especificado por
n. Si n se omite, el estado devuelto es el de la ultima orden
ejecutada en el cuerpo de la funcion. Si se emplea fuera de una
funcion, pero durante la ejecucion de un guion por la orden .
(source), hace que el shell pare la ejecucion de ese guion y
devuelva o n o el estado de salida de la ultima orden ejecutada
dentro del guion como el estado de salida del guion. Si se
emplea fuera de una funcion y no durante la ejecucion de un
guion por ., el estado de salida es `falso'.
set [--abefhkmnptuvxBCHP] [-o opci'on] [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 segun la localizacion 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 parametros posicionales
y se asignan, en orden, a $1, $2, ... $n. Las opciones, si se
especifican, tienen los siguientes significados:
-a Automaticamente marca variables, que se modifiquen o
creen, para exportacion al entorno de las ordenes
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
solo es efectivo cuando el control de trabajos esta
habilitado.
-e Sale inmediatamente si una orden simple (vea GRAM'ATICA
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 expansion de nombres de caminos.
-h Recuerda la localizacion de ordenes una vez que se
buscan para la 1a ejecucion. Esto esta habilitado de
forma predeterminada.
-k Todos los argumentos en forma de sentencias de
asignacion se ponen en el entorno para una orden, no
solamente aquellos que precedan al nombre de la orden.
-m Modo de monitor. Se habilita el control de trabajos.
Esta opcion esta 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 linea conteniendo su
estado de salida.
-n Lee ordenes pero no las ejecuta. Esto puede emplearse
para comprobar si un guion del shell tiene errores de
sintaxis. Para shells interactivos esta opcion no tiene
efecto.
-o nombre-opci'on
El nombre-opci'on puede ser uno de los siguientes:
allexport
Lo miso que -a.
braceexpand
Lo miso que -B.
emacs Emplea una interfaz de edicion de lineas de
ordenes al estilo de emacs. Esto esta activo de
forma predeterminada cuando el shell es
interactivo, a menos que se haya arrancado con
la opcion --noediting.
errexit Lo mismo que -e.
hashall Lo mismo que -h.
histexpand
Lo mismo que -H.
history Habilita la historia de ordenes, segun se
describio arriba bajo HISTORIA. Esta opcion
esta habilitada por omision 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
operacion predeterminada difiera del estandar
POSIX 1003.2, de forma que se siga este.
privileged
Lo mismo que -p.
verbose Lo mismo que -v.
vi Emplea una interfaz de edicion de la linea de
ordenes al estilo de vi.
xtrace Lo mismo que -x.
Si se da -o sin ningun nombre-opci'on, se muestran los
valores de las opciones activas. Si se da +o sin ningun
nombre-opci'on, se muestra en la salida estandar una
serie de ordenes set para recrear las opciones segun
estan 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
consideracion. Esta opcion se activa automaticamente en
el arranque si el identificador efectivo del usuario (o
grupo) no es igual al identificador real del usuario (o
grupo). Desactivar esta opcion 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 expansion de parametros. Si la expansion 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 lineas 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 expansion de llaves (vea Expansi'on
de llaves arriba). Esto esta activado de forma
predeterminada.
-C Si esta activo, bash no sobreescribe un fichero
existente con los operadores de redireccion >, >&, ni
<>. Esto puede cambiarse cuando se crean ficheros de
salida mediante el empleo del operador >| en vez de >.
-H Permite la sustitucion de historia mediante !. Esta
opcion esta activada por omision cuando el shell es
interactivo.
-P Si esta activada, el shell no sigue enlaces simbolicos
cuando ejecuta ordenes como cd que cambian el directorio
de trabajo. En su lugar emplea la estructura de
directorio fisica. De forma predeterminada, bash sigue
la cadena logica de directorios cuando ejecuta ordenes
que cambian el directorio de trabajo.
-- Si a esta opcion no sigue ningun argumento mas, entonces
los parametros posicionales se anulan. Si no, los
parametros posicionales se ponen con los valores dados
por los args, incluso si alguno de ellos comienza con un
-.
- Senala el final de las opciones, haciendo que el resto
de args se asignen a los parametros posicionales. Las
opciones -x y -v se desactivan. Si no hay mas args, los
parametros posicionales permanecen sin cambios.
Las opciones estan desactivadas de forma predeterminada a menos
que se diga otra cosa. Usar + en vez de - hace que estas
opciones se desactiven. Las opciones tambien 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 opcion invalida.
shift [n]
Los parametros posicionales desde n+1 ... se renombran a $1 ...
Los parametros representados por los numeros desde $# hasta
$#-n+1 se anulan. n debe ser un numero no negativo menor o
igual a $#. Si n es 0, no se cambia ningun parametro. Si n no
se da, se supone 1. Si n es mayor que $#, los parametros
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 opcion
-p, se muestra una lista de todas las opciones disponibles, con
una indicacion en cada una de si esta activa o no. La opcion -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 esta activado o no. Si se
dan varios argumentos nombreopc con -q, el estado de
salida es cero si todos los nombreopcs estan activados;
distinto de cero en otro caso.
-o Restringe los valores de nombreopc a aquellos definidos
para la opcion -o de la orden interna set.
Si se emplean -s o -u sin argumentos nombreopc, la lista
mostrada se limita a aquellas opciones que estan activadas o
desactivadas, respectivamente. A menos que se diga otra cosa,
las opciones de shopt estan inactivas (unset) de forma
predeterminada.
El estado de retorno cuando se listan opciones es cero si todos
los nombreopcs estan 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 opcion del shell
valida.
La lista de las opciones de shopt es:
cdable_vars
Si esta 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 esta activa, se corregiran pequenos 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 caracter que falte, y un
caracter que sobre. Si se encuentra una correccion, se
muestra el nombre de fichero corregido y la orden
procede. Esta opcion solo se emplea en shells
interactivos.
checkhash
Si esta activa, bash comprueba que una orden encontrada
en la tabla de dispersion existe antes de intentar
ejecutarlo. Si una orden en la tabla de dispersion ya no
existe, se realiza una busqueda normal en el PATH.
checkwinsize
Si esta activa, bash comprueba el tamano de ventana tras
cada orden y, si es necesario, actualiza los valores de
LINES y COLUMNS.
cmdhist Si esta activa, bash intenta guardar todas las lineas de
una orden de varias lineas en la misma entrada de
historia. Esto permite una re-edicion facil de dichas
ordenes.
dotglob Si esta activa, bash incluye los nombres de ficheros que
comiencen con un `.' en los resultados de la expansion
de nombres de caminos.
execfail
Si esta activa, un shell no interactivo no acabara 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 esta activa, los alias se expanden como se describio
arriba bajo ALIAS. Esta opcion esta habilitada de forma
predeterminada para shells interactivos.
extglob Si esta activa, se habilitan las caracteristicas de
concordancia de patrones extendidas descritas mas arriba
en Expansi'on de nombres de camino.
histappend
Si esta activa, la lista de historia se anade al fichero
nombrado segun el valor de la variable HISTFILE cuando
el shell acaba, en vez de sobreescribir el fichero.
histreedit
Si esta activa, y readline se esta utilizando, se le da
al usuario la oportunidad de re-editar la sustitucion de
historia fallida.
histverify
Si esta activa, y readline se esta utilizando, los
resultados de la sustitucion de historia no se pasan
inmediatamente al analizador del shell. En vez de eso,
la linea resultante se carga en el bufer de edicion de
readline, permitiendo asi una modificacion posterior.
hostcomplete
Si esta activa, y readline se esta utilizando, bash
intentara terminar de escribir un nombre de computador
anfitrion cuando se este completando una palabra que
contenga una @ (vea Terminaci'on bajo READLINE arriba).
Esto esta activado de forma predeterminada.
huponexit
Si esta activa, bash enviara una senal SIGHUP a todos
los trabajos cuando un shell de entrada interactivo
finalice.
interactive_comments
Si esta activa, permite a una palabra que empiece por #
hacer que esa palabra y todos los caracteres restantes
de esa linea no sean tenidos en cuenta en un shell
interactivo (vea COMENTARIOS arriba). Esta opcion esta
habilitada por omision.
lithist Si esta activa, y la opcion cmdhist tambien lo esta, las
ordenes multi-linea se guardan en la historia con saltos
de linea empotrados en vez de emplear como separador el
punto y coma, donde sea posible.
mailwarn
Si esta activa, y a un fichero donde bash esta buscando
correo nuevo se ha accedido desde la ultima vez que se
busco, se muestra el mensaje ``The mail in mailfile has
been read'', o su equivalente en el idioma local, que en
espanol seria ``El correo en buz'on ha sido leido''.
nocaseglob
Si esta activa, bash busca concordancias de nombres de
ficheros sin importar mayusculas o minusculas cuando
realice la expansion de nombres de caminos (vea
Expansi'on de nombres de caminos arriba).
nullglob
Si esta activa, bash permite que los patrones que no
concuerden con ningun fichero (vea Expansi'on de nombres
de caminos arriba) se expandan a una cadena vacia, en
vez de a si mismos.
promptvars
Si esta activa, las cadenas de caracteres que sirven de
indicadores estan sujetas a expansion de variable y
parametro tras ser expandidas como se describio en
INDICADORES arriba. Esta opcion esta activa de forma
predeterminada.
shift_verbose
Si esta activa, la orden interna shift muestra un
mensaje de error cuando el numero de shift excede al de
parametros posicionales.
sourcepath
Si esta activa, la orden interna source (.) emplea el
valor de PATH para buscar el directorio que contenga al
fichero suministrado como argumento. Esta opcion esta
activa por omision.
suspend [-f]
Suspende la ejecucion de este shell hasta que reciba una senal
SIGCONT. La opcion -f dice que no hay que protestar si este 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
opcion -f no se haya dado, o si el control de trabajos no esta
habilitado.
test expr
[ expr ]
Devuelve un estado de 0 o 1 dependiendo de la evaluacion de la
expresion condicional expr. Cada operador y operando debe ser
un argumento separado. Las expresiones se componen de las
primarias descritas mas 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 [ evaluan expresiones condicionales segun un conjunto de
reglas basadas en el numero de argumentos.
0 argumentos
La expresion es falsa.
1 argumento
La expresion es verdad si y solo si el argumento no esta
vacio.
2 argumentos
Si el primer argumento es !, la expresion es verdad si y
solo si el segundo argumento es nulo. Si el primer
argumento es uno de los operadores condicionales monarios
listados arriba en EXPRESIONES CONDICIONALES, la
expresion es verdad si el test monario es verdad. Si el
primer argumento no es un operador condicional monario
valido, la expresion es falsa.
3 argumentos
Si el segundo argumento es uno de los operadores
condicionales binarios listados arriba en EXPRESIONES
CONDICIONALES, el resultado de la expresion es el
resultado del test binario empleando el primer y tercer
argumentos como operandos. Si el primer argumento es !,
el valor es la negacion 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 expresion 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 negacion
de la expresion de tres argumentos compuesta por los
argumentos restantes. De otra forma, la expresion se
analiza y evalua de acuerdo con la precedencia utilizando
las reglas listadas arriba.
5 o mas argumentos
La expresion se analiza y evalua 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 el. El estado de retorno
es 0.
trap [-lp] [arg] [nombre-se~nal ...]
La orden arg va a leerse y ejecutarse cuando el shell reciba
la(s) senal(es) especificada(s) por nombre-se~nal. Si arg esta
ausente o es -, todas las senales especificadas se reestablecen
a sus valores originales (los que tenian cuando se entro en el
shell). Si arg es la cadena vacia, la senal especificada por
cada nombre-se~nal no se tiene en cuenta por parte del shell y de
las ordenes que se llamen desde el. Si arg es -p entonces se
muestran las ordenes de las trampas asociadas con cada nombre-
se~nal. Si no se pasan argumentos o si solo se da -p, trap
muestra la lista de ordenes asociadas con cada numero de senal.
Cada nombre-se~nal es o bien un nombre de senal de los definidos
en <signal.h>, o un numero de senal. Si un nombre-se~nal es EXIT
(0), la orden arg se ejecuta cuando se sale del shell. Si un
nombre-se~nal es DEBUG, la orden arg se ejecuta tras cada orden
simple (vea GRAM'ATICA DEL SHELL arriba). La opcion -l hace que
el shell muestre una lista de nombres de senal y sus numeros
correspondientes. Las senales que no se tienen en cuenta ya
cuando se entra en el shell no pueden ser atrapadas ni
restablecidas. Las senales atrapadas se reestablecen a sus
valores originales en un proceso hijo cuando se crea. El estado
de retorno es `falso' si cualquier nombre-se~nal no es valido; de
otro modo, trap devuelve `verdad'.
type [-atp] nombre [nombre ...]
Sin opciones, indica como sera interpretado cada nombre si se
usa como un nombre de orden. Si se emplea la opcion -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 funcion, 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
opcion -p, type devuelve o bien el nombre del fichero de disco
que se ejecutaria si se especificara nombre como un nombre de
orden, o bien nada si type -t nombre no devolviera file. Si una
orden esta en la tabla de dispersion, -p muestra el valor de
dicha tabla, no necesariamente el fichero que aparezca primero
en PATH. Si se emplea la opcion -a, type muestra todos los
sitios que contengan un ejecutable llamado nombre. Esto incluye
alias y funciones, si y solo si la opcion -p no se ha usado
tambien. La tabla de dispersion de las ordenes 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 [l'imite]]
Proporciona control sobre los recursos disponibles para el shell
y para los procesos arrancados por el, en sistemas que permitan
tal control (Linux por ejemplo, y por supuesto). El valor de
l'imite puede ser un numero en la unidad especificada para el
recurso, o el valor unlimited, o sea, ilimitado. Las opciones
-H y -S especifican que el limite para el recurso dado va a ser
duro o blando. Un limite duro es aquel que no puede ser
aumentado una vez puesto; un limite blando puede incrementarse
hasta el valor dado por el limite duro. Si no se especifican ni
-H ni -S, se establecen ambos limites. Si l'imite se omite, se
muestran los valores del limite blando del recurso, a menos que
se de la opcion -H. Cuando se especifica mas de un recurso, se
imprime el nombre del limite y la unidad antes del valor. Otras
opciones se interpretan como sigue:
-a Se informa de todos los limites actuales
-c El tamano maximo de ficheros de volcados de memoria
(core)
-d El tamano maximo del segmento de datos de un proceso
-f El tamano maximo de ficheros creados por el shell
-l El tamano maximo que puede ser bloqueado en memoria
-m El tamano del maximo conjunto residente (memoria)
-n EL numero maximo de descriptores de ficheros abiertos (la
mayoria de sistemas no permiten establecer este valor)
-p El tamano de una tuberia en bloques de 512 B (esto puede
no estar establecido)
-s El tamano maximo de pila
-t La maxima cantidad de tiempo de CPU en segundos
-u El numero maximo de procesos disponibles para un solo
usuario
-v La maxima cantidad de memoria virtual disponible para el
shell
Si se da l'imite, es el nuevo valor del recurso especificado (la
opcion -a es solo para mostrar los valores). Si no se da
ninguna opcion, entonces se supone -f. Los valores estan en
incrementos de 1024 B, excepto para -t, que esta en segundos,
-p, que esta 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 opcion invalida, se de como l'imite un argumento no
numerico distinto de unlimited, o bien ocurra un error mientras
se establece un nuevo limite.
umask [-p] [-S] [modo]
La mascara de creacion de ficheros del usuario se establece a
modo. Si modo empieza con un digito, se interpreta como un
numero octal; si no, se interpreta como un modo simbolico
similar al aceptado por chmod(1). Si modo se omite, o si se da
la opcion -S, se muestra el valor actual de la mascara. La
opcion -S hace que la mascara se imprima en forma simbolica; la
salida predeterminada es como un numero octal. Si se da la
opcion -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 cambio 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 opcion
-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 funcion correspondiente.
Si no se dan opciones, o se da la opcion -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 funcion del shell, y se borra la definicion de
la funcion. Cada variable o funcion se quita del entorno pasado
a ordenes subsiguientes. Si se quita cualquiera de RANDOM,
SECONDS, LINENO, HISTCMD, o DIRSTACK, pierde su propiedad
especial, incluso aunque mas 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
terminacion. n puede ser un identificador de proceso (PID) o
una especificacion de trabajo; si se da una espec. de trabajo,
se espera a todos los procesos en la tuberia 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
ultimo proceso o trabajo al que se espero.
SHELL RESTRINGIDA
Si bash se arranca con el nombre rbash, o se da la opcion -r en la
llamada, el shell se convierte en restringido. Un shell restringido se
emplea para establecer un ambiente mas controlado que el que el shell
estandar proporciona. Se comporta de forma identica a bash con la
excepcion de que lo siguiente no esta permitido o no se realiza:
o cambiar de directorio con cd
o establecer o anular los valores de SHELL o de PATH
o especificar nombres de ordenes que contengan /
o especificar un nombre de fichero que contenga al menos una /
como un argumento de la orden interna . (source)
o importar definiciones de funciones desde el entorno del shell en
el arranque
o analizar el valor de SHELLOPTS desde el entorno del shell en el
arranque
o redirigir la salida usando los operadores de redireccion >, >|,
<>, >&, &>, y >>
o utilizar la orden interna exec para reemplazar el shell por otro
programa
o anadir o eliminar ordenes incorporadas con las opciones -f o -d
de la orden interna enable.
o dar la opcion -p a la orden interna command.
o desactivar el modo restringido con set +r o set +o restricted.
Estas restricciones entran en vigor despues de que se lean los ficheros
de arranque que hubiera.
Cuando se ejecuta una orden que resulta ser un guion del shell (vea
EJECUCI'ON DE 'ORDENES arriba), rbash desactiva todas las restricciones
en el shell lanzado para ejecutar el guion.
V'EASE TAMBI'EN
Bash Features (Caracteristicas 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, leido en shells de entrada
~/.bash_profile
El fichero de inicio personal, leido 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
Traduccion al espanol: Gerardo Aburruzaga Garcia, para el proyecto
PAMELI.
Gerardo@CICA.es
INFORMES DE FALLOS
Si Ud. encuentra un fallo en bash, deberia informar de ello. Pero
primero deberia asegurarse de que realmente es un fallo, y de que
aparece en la ultima version 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 como corregirlo, ise le anima a que nos mande tambien la
correccion! Las sugerencias y los informes de fallos `filosoficos' se
pueden enviar por correo electronico 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 numero de version de bash
El tipo de computador (hardware) y el sistema operativo
El compilador que se empleo para compilarlo
Una descripcion del comportamiento del fallo
Un corto guion o `receta' para reproducir el fallo
bashbug inserta automaticamente 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 pagina de
manual deben dirigirse a chet@ins.CWRU.Edu.
Los relativos a la traduccion de esta pagina 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 especificacion POSIX.
Los alias son confusos en algunos casos.
Las ordenes internas del shell y las funciones no son
interrumpibles/rearrancables.
Las ordenes compuestas y las secuencias de ordenes 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 ordenes entre parentesis; asi la forzamos a
ejecutarse en un subshell, que puede pararse como una unidad.
Las ordenes dentro de una sustitucion de orden de tipo $(...) no se
analizan hasta que se intenta la sustitucion. Esto provocara un retraso
en la aparicion de mensajes posibles de error hasta algun tiempo
despues de que se introduzca la orden.
Las variables de tipo vector no pueden (aun) exportarse.