Я вижу, что extglob включен, но мне бы хотелось знать, где он настраивается.
$ shopt extglob
extglob on
$
Не нашел его в этих файлах.
~/.bashrc
~/.bash_profile
~/.profile
/etc/bashrc
(нет такого файла)/etc/bash.bashrc
решение1
На моей виртуальной машине 14.04 я нашел его в /usr/share/bash-completion/bash_completion
:
ubuntu@ubuntu:~$ grep extglob /usr/share/bash-completion/bash_completion
shopt -s extglob progcomp
ubuntu@ubuntu:~$
Источник ~/.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
Это можно выяснить, запустив bash -x
, который показывает все исходные файлы запуска и их команды. Запустите script -c "bash -x"
, затем exit
в новой интерактивной оболочке изучите typescript
вывод файла из скрипта:
+ . /usr/share/bash-completion/bash_completion
...
++ shopt -s extglob progcomp
Символы +
' указывают на уровень исходного файла, поэтому, если мы посмотрим на один уровень выше по shopt
команде, мы увидим /usr/share/bash-completion/bash_completion
is sourced.
решение2
Он установлен в /usr/share/bash-completion/bash_completion
файле:
shopt -s extglob progcomp
Файл ~/.bashrc
имеет следующее, если posix
опция не задана, то:
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
Это означает, что если файл /usr/share/bash-completion/bash_completion
существует, он будет выбран в качестве источника.
Поскольку этот файл содержит строку для установки extglob
, она будет установлена при запуске интерактивной оболочки без входа в систему.