printf %s\\n "$-"
Enumerará las opciones de letra única en una sola cadena.
Ese parámetro también se puede usar como:
set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"
Para deshabilitar -f
primero la expansión de nombre de archivo de shell al mismo tiempo que guarda un valor para $-
, si lo hay, en $1
. A continuación, no se producen globs, y la última +f
expansión de ilename vuelve a estar habilitada y posiblemente también deshabilitada.
Por ejemplo, si la -f
expansión de nombre de archivo ya estaba deshabilitada cuando $-
se guardó por primera vez el valor , entonces su valor guardado sería (al menos) :
f
Y así, cuando set
se ejecuta de nuevo, funciona para:
set +f -f
Lo que simplemente te devuelve a donde empezaste.
set +o
Enumerará todas set
las opciones de shell de la tabla (consulte la respuesta de Jason para las shopt
opciones de ¿es una palabra?) En una forma segura para el reingreso de shell. De esa manera, también puedes hacer:
state=$(set +o)
set -some -crazy -options
eval "$state"
Para guardar, cambiar y restaurar el estado de las opciones de shell respectivamente.
Para manejar shopt
iones y set
opciones de tabla de una vez:
state=$(set +o;shopt)
#do what you want with options here
eval "$state"
También puede llamar set
sin ningún argumento para agregar una lista de todas las variables establecidas actualmente en el shell, también citadas para volver a ingresar al shell. Y puede, en bash, agregar adicionalmente el comando typeset -fp
para incluir también todas las funciones de shell declaradas actualmente. Puede agruparlo todo junto y eval
cuando esté listo. Incluso puede llamar alias
sin argumentos para más de lo mismo. Eso ... podría cubrirlo, sin embargo. Supongo que sí "$@"
, lo cual tendrías que poner bash
primero en una matriz, supongo, antes de hacerlo set
.
No, también hay trap
. Este es un poco divertido. Generalmente:
trap 'echo this is my trap' 0
(echo this is my subshell; trap)
... solo imprimirá esta es mi subshell porque la subshell es un proceso nuevo y obtiene su propio conjunto de trap
s, por lo que no hereda ninguna trap
s sino aquellas que su padre ha ignorado explícitamente (como trap '' INT
) .
Sin embargo:
trap 'echo this is my trap' 0
save_traps=$(trap)
trap
se comporta especialmente cuando es el primer y único comando ejecutado en un subshell de sustitución de comandos en el sentido de que reproducirá una lista del shell primario actualmente configurado traps
en un formato que se cita para un reingreso seguro al shell. Y para que pueda hacer eso save_traps
, luego set
sin argumentos, y todo el resto ya mencionado, para obtener un bloqueo en todo el estado de shell. Sin embargo, es posible que desee agregar explícitamente export -p
y readonly -p
restaurar los atributos var de shell originales.
De todos modos, eso es suficiente.
set +o
yshopt
? (en cuanto ashopt
ser una palabra,settable
se usa en la página de manual, así queshoptable
funciona para mí)