Como saber se o extglob está ativado na sessão atual do bash?
9
Eu tenho um terminal bash aberto. Quero descobrir se a opção extglob está ativada ou desativada nesta sessão, antes de alterar seu valor. Como posso fazer isso?
Observe que não há necessidade de verificar, a menos que você esteja curioso. Se você quiser, basta executar shopt -s extglobou, se quiser, executar shopt -u extglob. Não faz nenhuma diferença se foi originalmente ou não.
terdon
Respostas:
15
Apenas corra:
$ shopt extglob
Ele retornará o status atual:
$ shopt extglob
extglob on
$ shopt -u extglob
$ shopt extglob
extglob off
Porque eu não quero que a saída para mexer o meu fora padrão :)
cuonglm
O que você quer dizer? Tanto quanto posso dizer, o OP quer verificar se a opção está definida ou não. Eles mencionam que isso está em um terminal, então duvido que faça parte de um script. E, afinal, qual é a diferença? Ambos shopt extglobe sua abordagem gravam no stdout. Você está pensando shopt -q extglob && shopt -u extglob || shopt -s extglob?
terdon
@terdon: Bem, minha abordagem só escreve para stdout se eu quiser . A abordagem geral é shopt -q extglob && : Code when enable || : Code when disable.
cuonglm
3
Eu posso imaginar escrever um script que tentaria preservar a configuração existente do usuário, mas pode ter um pouco crítico de código que será interrompido se não for definido de uma maneira específica. Isso sugere um método para determinar silenciosamente o estado atual, salvá-lo e restaurá-lo o mais rápido possível depois de executar as operações cruciais que exigem um estado potencialmente diferente.
Monty mais dura
5
Existem duas listas de opções no bash. Um para shopte um para set.
A opção extglobpertence à shoptlista.
Seu valor pode ser impresso usando shopt extglobou shopt -p extglob.
Uma opção como nounsetpertence à setlista.
Seu valor pode ser impresso usando shopt -op nounsetou shopt -o nounset.
Marque uma opção.
Para imprimir uma opção específica (sem alterá-la) para shopt, use shopt -p name:
$ shopt -p xpg_echo
shopt -u xpg_echo
E para set, use: shopt -po name(sim, você pode usar shopt -oppara setlista).
$ shopt -po xtraceset+o xtrace
Listar opções.
Para listar todas as opções do shopt, use shopt(ou reutilizável shopt -p).
Também shopt -sou shopt -upode ser usado.
A maneira de listar todas as opções seté com set -o(relacionado set +o:).
Ou: shopt -oé equivalente a set -oe shopt -opé para set +o.
Manual
De LESS=+/'^ *shopt \[' man bash:
Sem opções ou com a opção -p, é exibida uma lista de todas as opções configuráveis. Se -s ou -u for usado sem argumentos optname, a exibição será limitada às opções definidas ou não, respectivamente.
De LESS=+/'^ *set \[' man bash:
Se -o for fornecido sem o nome da opção, os valores das opções atuais serão impressos. Se + o for fornecido sem o nome da opção, uma série de comandos set para recriar as configurações atuais da opção será exibida na saída padrão.
Exemplos
$ set-o
allexport off
braceexpand on
emacs on
errexit off
errtrace off
functrace off
hashall on
histexpand on
history on
ignoreeof off
interactive-comments on
keyword off
monitor on
noclobber off
noexec off
noglob off
nolog off
notify off
nounset off
onecmd off
physical off
pipefail off
posix off
privileged off
verbose off
vi off
xtrace off
shopt -s extglob
ou, se quiser, executarshopt -u extglob
. Não faz nenhuma diferença se foi originalmente ou não.Respostas:
Apenas corra:
Ele retornará o status atual:
Para mostrar todas as opções, basta executar:
fonte
Use shopt -q :
-q
A opçãoshopt
descarta a saída e retorna o status para indicar que as opções estão definidas ou não.Observe que
shopt
apenas as opções de relatórios que podem aparecer naBASHOPTS
variável, essas opções não são válidas para oset
comando interno.Para verificar as opções que são válidas
set
ou que podem aparecerSHELLOPTS
, useshopt -qo
:fonte
shopt extglob
?shopt extglob
e sua abordagem gravam no stdout. Você está pensandoshopt -q extglob && shopt -u extglob || shopt -s extglob
?shopt -q extglob && : Code when enable || : Code when disable
.Existem duas listas de opções no bash. Um para
shopt
e um paraset
.A opção
extglob
pertence àshopt
lista.Seu valor pode ser impresso usando
shopt extglob
oushopt -p extglob
.Uma opção como
nounset
pertence àset
lista.Seu valor pode ser impresso usando
shopt -op nounset
oushopt -o nounset
.Marque uma opção.
Para imprimir uma opção específica (sem alterá-la) para shopt, use
shopt -p name
:E para
set
, use:shopt -po name
(sim, você pode usarshopt -op
paraset
lista).Listar opções.
Para listar todas as opções do shopt, use
shopt
(ou reutilizávelshopt -p
).Também
shopt -s
oushopt -u
pode ser usado.A maneira de listar todas as opções
set
é comset -o
(relacionadoset +o
:).Ou:
shopt -o
é equivalente aset -o
eshopt -op
é paraset +o
.Manual
De
LESS=+/'^ *shopt \[' man bash
:De
LESS=+/'^ *set \[' man bash
:Exemplos
E
Vale mencionar sobre o
shopt -op
que realmente lista asset
opções:fonte