Vejo que o extglob está ativado, mas gostaria de saber onde está definido.
$ shopt extglob
extglob on
$
Não encontrei nesses arquivos.
~/.bashrc
~/.bash_profile
~/.profile
/etc/bashrc
(arquivo inexistente)/etc/bash.bashrc
Responder1
Na minha VM 14.04, encontrei em /usr/share/bash-completion/bash_completion
:
ubuntu@ubuntu:~$ grep extglob /usr/share/bash-completion/bash_completion
shopt -s extglob progcomp
ubuntu@ubuntu:~$
Isto é fornecido por ~/.bashrc
:
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
Isso pode ser descoberto executando bash -x
, que mostra todos os arquivos de inicialização de origem e seus comandos. Execute script -c "bash -x"
e, em seguida exit
, no novo shell interativo e examine a typescript
saída do arquivo do script:
+ . /usr/share/bash-completion/bash_completion
...
++ shopt -s extglob progcomp
Os +
's indicam o nível do arquivo de origem, portanto, quando olhamos um nível acima do shopt
comando, vemos /usr/share/bash-completion/bash_completion
que é de origem.
Responder2
Está definido no /usr/share/bash-completion/bash_completion
arquivo:
shopt -s extglob progcomp
O ~/.bashrc
arquivo tem o seguinte, se posix
a opção não estiver definida:
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
Isso significa que se o arquivo /usr/share/bash-completion/bash_completion
existir, ele será a fonte do arquivo.
Como esse arquivo contém a linha para set extglob
, ele será definido ao declarar um shell interativo sem login.