저는 Ubuntu 20.04를 사용하고 있으며 루트의 .bashrc 파일에서 bash 완료 설정이 기본적으로 주석 처리되어 있음을 발견했습니다.
# 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 [ -f /etc/bash_completion ] && ! shopt -oq posix; then
# . /etc/bash_completion
# fi
주석 처리를 해제하면 완성이 다시 작동합니다. 기본적으로 주석이 달린 이유는 무엇입니까? 이는 보안 고려 사항과 관련이 있습니까?
답변1
그 이유는 표시되는 코드에 설명되어 있습니다. 댓글을 읽어보세요(강조):
프로그래밍 가능 완성 활성화(/etc/bash.bashrc 및 /etc/profile 소스 /etc/bash.bashrc에서 이미 활성화된 경우 이 기능을 활성화할 필요가 없습니다.).
완료는 다음 파일로 인해 Ubuntu 시스템에서 기본적으로 활성화됩니다 /etc/profile.d/bash_completion.sh
.
$ cat /etc/profile.d/bash_completion.sh
# Check for interactive bash and that we haven't already been sourced.
if [ -n "${BASH_VERSION-}" -a -n "${PS1-}" -a -z "${BASH_COMPLETION_VERSINFO-}" ]; then
# Check for recent enough version of bash.
if [ ${BASH_VERSINFO[0]} -gt 4 ] || \
[ ${BASH_VERSINFO[0]} -eq 4 -a ${BASH_VERSINFO[1]} -ge 1 ]; then
[ -r "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion" ] && \
. "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion"
if shopt -q progcomp && [ -r /usr/share/bash-completion/bash_completion ]; then
# Source completion code.
. /usr/share/bash-completion/bash_completion
fi
fi
fi
이 파일은 /etc/profile
로그인 셸을 시작할 때 읽는 파일인 에서 시작됩니다.
$ grep -A6 profile\.d /etc/profile
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
~/.bashrc
즉 , 루트 파일에서 다시 활성화할 필요가 없으며 위 파일을 통해 이미 활성화되어 있습니다. 실제로 /etc/bash_completion
Ubuntu의 기본값은 다음과 같기 때문에 표시되는 코드는 의미가 없습니다.
$ cat /etc/bash_completion
. /usr/share/bash-completion/bash_completion
이것이 바로 그것입니다 /etc/profile.d/bash_completion.sh
.