Wo wird „shopt extglob“ von Bash für meine interaktive Shell aktiviert?

Wo wird „shopt extglob“ von Bash für meine interaktive Shell aktiviert?

Ich sehe, dass Extglob aktiviert ist, aber ich möchte wissen, wo dies eingestellt ist.

$ shopt extglob
extglob         on
$

Habe es in diesen Dateien nicht gefunden.

  • ~/.bashrc
  • ~/.bash_profile
  • ~/.profile
  • /etc/bashrc(keine solche Datei)
  • /etc/bash.bashrc

Antwort1

Auf meiner 14.04-VM habe ich es in folgendem gefunden /usr/share/bash-completion/bash_completion:

ubuntu@ubuntu:~$ grep extglob /usr/share/bash-completion/bash_completion 
shopt -s extglob progcomp
ubuntu@ubuntu:~$ 

Quelle ~/.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

Dies lässt sich herausfinden bash -x, indem Sie ausführen. Dadurch werden alle Startdateien und deren Befehle angezeigt. Führen Sie aus script -c "bash -x", dann exitin der neuen interaktiven Shell, und untersuchen Sie anschließend die typescriptDateiausgabe des Skripts:

+ . /usr/share/bash-completion/bash_completion

...

++ shopt -s extglob progcomp

Die +'s geben die Ebene der Quelldatei an. Wenn wir also vom shoptBefehl aus eine Ebene nach oben schauen, sehen wir, /usr/share/bash-completion/bash_completiondass 's als Quelle verwendet wird.

Antwort2

Es wird unter /usr/share/bash-completion/bash_completionder Datei festgelegt:

shopt -s extglob progcomp

Die ~/.bashrcDatei enthält Folgendes. Wenn posixdie Option nicht gesetzt ist, dann:

if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion

Dies bedeutet, dass die Datei als /usr/share/bash-completion/bash_completionQuelle angegeben wird, wenn sie existiert.

Da diese Datei die festzulegende Zeile enthält extglob, wird sie beim Starten einer interaktiven Shell ohne Anmeldung festgelegt.

verwandte Informationen