printf %s\n "$-"
Relacionará as opções de letras únicas em uma única string.
Esse parâmetro também pode ser usado como:
set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"
Primeiro, desative a expansão shell -f
ilename e, ao mesmo tempo, salve um valor para $-
- se houver - em $1
. Em seguida, nenhum globs ocorre e a última expansão +f
ilename está novamente ativada e, possivelmente, também desativada.
Por exemplo, se a expansão -f
ilename já estivesse desativada quando o valor de $-
fosse salvo pela primeira vez, seu valor salvo seria (pelo menos) :
f
E assim, quando set
for executado novamente, funcionará para:
set +f -f
O que te coloca de volta onde você começou.
set +o
Listará todas as opções de shell de tabela set
(consulte a resposta de Jason para o shopt
capaz - é que uma palavra? - opções) em um formulário que é seguro para a reentrada da shell. Dessa forma, você também pode fazer:
state=$(set +o)
set -some -crazy -options
eval "$state"
Para salvar, alterar e restaurar o estado das opções do shell, respectivamente.
Para processar as opções shopt
ions e set
table de uma só vez:
state=$(set +o;shopt)
#do what you want with options here
eval "$state"
Você também pode chamar set
sem quaisquer argumentos para adicionar uma lista de todas as variáveis definidas atualmente no shell - também citadas como reentrada no shell. E você pode - no bash - adicionar adicionalmente o comando typeset -fp
para incluir também todas as funções de shell atualmente declaradas. Você pode juntar tudo e eval
quando estiver pronto. Você pode até mesmo chamar alias
sem argumentos para mais do mesmo. Isso ... pode cobri-lo, no entanto. Eu acho que há "$@"
- que você teria que colocar em uma matriz bash
primeiro, suponho, antes de fazer set
.
Não, também há trap
. Este é um pouco engraçado. Geralmente:
trap 'echo this is my trap' 0
(echo this is my subshell; trap)
... só imprimirá este é meu subshell porque o subshell é um novo processo e obtém seu próprio conjunto de trap
s - e, portanto, não herda nenhum trap
s, mas aqueles que seu pai ignorou explicitamente - (como trap '' INT
) .
No entanto:
trap 'echo this is my trap' 0
save_traps=$(trap)
trap
comporta-se especialmente quando é o primeiro e o único executado em uma sub-rotina de substituição de comandos, na medida em que reproduzirá uma lista do conjunto traps
do shell pai em um formato que seja cotado para reentrada segura para o shell. E assim você pode fazer o save_traps
, então set
sem argumentos - e todos os demais já mencionados - para praticamente obter um bloqueio em todo o estado do shell. Você pode querer adicionar explicitamente export -p
e readonly -p
para restaurar os atributos var do shell original, no entanto.
De qualquer forma, isso é o suficiente.