내 대화형 셸에 대해 bash의 "shopt extglob"은 어디에 설정되어 있나요?

내 대화형 셸에 대해 bash의 "shopt extglob"은 어디에 설정되어 있나요?

extglob이 켜져 있는 것을 보았지만 이것이 어디에 설정되어 있는지 알고 싶습니다.

$ shopt extglob
extglob         on
$

이 파일에서는 찾을 수 없습니다.

  • ~/.bashrc
  • ~/.bash_profile
  • ~/.profile
  • /etc/bashrc(해당 파일이 없습니다)
  • /etc/bash.bashrc

답변1

내 14.04 VM에서 다음 위치에서 찾았습니다 /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.

답변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존재하면 파일의 소스가 됩니다.

해당 파일에는 set 행이 포함되어 있으므로 extglob대화형 비로그인 셸을 언급할 때 설정됩니다.

관련 정보