존재하지 않는 bash 완성 파일이 .bashrc에서 참조되는 이유는 무엇입니까?

존재하지 않는 bash 완성 파일이 .bashrc에서 참조되는 이유는 무엇입니까?

내 것을 청소 ~/.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

이러한 경로는 존재하지 않으며 이전에는 존재한 적이 없다고 확신합니다. 그런데 저는 Debian을 사용하고 있습니다. 개발자가 Debian을 제거하는 것을 잊었나요?

귀하의 정보에 감사드립니다

답변1

bash셸 코드의 목적은 발견된 두 파일 중 첫 번째 파일을 가져오는 것입니다. 단, 셸의 posix옵션이 활성화되지 않은 경우에만 해당됩니다. 이 두 파일은 쉘 특정 프로그래밍 가능 자동 완성 지원을 제공할 수 있습니다.

Debian Linux 시스템에서는 두 경로 이름이 모두 package 에서 제공됩니다 bash-completion. 이 패키지가 설치되어 있지 않으면 쉘 코드는 아무 작업도 수행하지 않습니다.

bash이 코드를 에 배치하는 것은 Debian의 패키지 입니다 /etc/skel/.bashrc. /etc/skel새 사용자 계정이 생성되면 사용자의 초기 파일 세트가 복사됩니다. 즉, 파일이 .bashrc그 안의 코드와 함께 에서 으로 복사됩니다. 계정이 생성되고 사용자가 계정에 액세스할 수 있게 되면 사용자는 원하는 대로 초기 파일 세트를 삭제하거나 수정할 수 있습니다./etc/skel/.bashrc~/.bashrc

이 코드는 bash-completion패키지가 설치되지 않았기 때문에 존재합니다. 결국 이것은 단지존경받는Debian에 대한 패키지의 종속성 (패키지에서 분리되어 bash2008년에 bash자체 패키지가 되었습니다 ). 패키지가 설치된 경우 bash-completion사용자는 쉘의 프로그래밍 가능한 완성 시스템을 사용하기를 원할 수 있으므로 파일을 얻어야 합니다. 필요하지 않은 경우 패키지를 제거하거나 bash-completion다중 사용자 시스템의 경우 패키지에서 관련 코드를 제거하거나 주석 처리하는 것을 고려하십시오 ~/.bashrc.

이 코드의 모양에 영향을 미치는 관련 데비안 버그 보고서:

관련 정보