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.