printf %s\\n "$-"
Irá listar as opções de letra única em uma única sequência.
Esse parâmetro também pode ser usado como:
set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"
Para primeiro desabilitar a -f
expansão nome do arquivo de shell e salvar simultaneamente um valor para $-
- se houver - em $1
. Em seguida, nenhum globs ocorre e a +f
expansão do último nome de arquivo é ativada novamente e, possivelmente, também desativada.
Por exemplo, se a -f
expansão ilename já estava desativada quando o valor de $-
foi salvo pela primeira vez, seu valor salvo seria (pelo menos) :
f
E assim, quando set
é executado novamente, funciona:
set +f -f
O que apenas o coloca de volta onde você começou.
set +o
Irá listar todas set
as opções de shell da tabela (consulte a resposta de Jason para asshopt
opções capazes - isso é uma palavra? -) em um formato que seja seguro para a reinserção do 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 manipular shopt
íons e set
opções de tabela de uma só vez:
state=$(set +o;shopt)
#do what you want with options here
eval "$state"
Você também pode chamar set
sem argumentos para adicionar uma lista de todas as variáveis definidas no momento do shell - também citadas para reinserção no shell. E você pode - no bash - adicionar adicionalmente o comando typeset -fp
para incluir também todas as funções shell declaradas no momento. Você pode agrupar tudo junto e eval
quando estiver pronto. Você pode até ligar alias
sem argumentos para mais do mesmo. Isso ... pode cobrir, no entanto. Eu acho que existe "$@"
- o que você teria que colocar em uma bash
matriz primeiro, suponho, antes de fazer set
.
Não, há também trap
. Este é um pouco engraçado. Geralmente:
trap 'echo this is my trap' 0
(echo this is my subshell; trap)
... apenas imprimirá este é o 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, exceto aqueles que seu pai ignorou explicitamente - (como trap '' INT
) .
Contudo:
trap 'echo this is my trap' 0
save_traps=$(trap)
trap
se comporta especialmente quando é o primeiro e único comando executado em um subshell de substituição de comando, na medida em que reproduz uma lista do shell pai atualmente definido traps
em um formato que é citado para reentrada segura no shell. E assim você pode fazer o save_traps
, em seguida, set
sem argumentos - e todo o resto já foi mencionado - a praticamente obter um bloqueio em todo o estado shell. Você pode adicionar export -p
e readonly -p
restaurar explicitamente os atributos originais do shell var.
Enfim, isso é o suficiente.
set +o
eshopt
? (como ashopt
capacidade de ser uma palavra,settable
é usada na página de homem, assimshoptable
funciona para mim)