Apt-get 자동 완성


9

현재 64 비트 Debian Wheezy를 실행하고 있습니다.

apt-get의 자동 완성에 문제가 있습니다. bash-completion이 설치되었습니다.

쉘에서 루트로 로그인 한 경우 apt-get에 자동 완성을 사용할 수 있습니다 (예 : apt-get install wicd [tab] [tab ]). 그러면 해당 패키지와 일치하는 모든 패키지가 표시됩니다. 그러나 루트가 아닌 다른 사용자 (sudo 포함)에서 apt-get에 자동 완성을 사용하려고하면 전혀 작동하지 않습니다. 파일 이름과 같은 다른 것들을 자동 완성 할 수 있습니다.

어떤 도움?

내 .bashrc 및 / etc / profile에 다음 코드가 있습니다.

 if [ -f /etc/bash_completion ]; then
      . /etc/bash_completion
 fi

1
먼저, root와 다른 사용자가 동일한 쉘을 가지고 있는지 확인하십시오. 그렇지 않다면, 그것은 다른 행동의 이유입니다. 그렇지 않으면 'apt-cache --no-generate pkgnames "wicd"'를 시도하십시오. 작동합니까? 이것이 bash가 'apt-get install wicd [TAB]'의 완성을 생성하기 위해 사용하는 것입니다.
angus

둘 다 동일한 쉘 인 bash를 사용하고 있습니다. 당신이 나에게 준 apt-cache 명령은 작동하고 모든 wicd 패키지의 목록을 보여줍니다. 또한, 내가 알게 된 것은 컴퓨터가 처음 부팅되고 쉘에 처음 로그인 할 때 (gui 로그인이없는 경우) apt-get 자동 완성은 모든 계정에서 작동한다는 것입니다. 그러나 startx로 fvwm-crystal window manager를 실행 한 다음 터미널을 열면 내 사용자 계정으로 다시 작동하지 않습니다. 여전히 fvwm-crystal에서 root로 작동합니다.
Dennis Linuz

자, 이것이 일어날 수있는 일입니다. / etc / profile 및 .bash_profile은 로그인 쉘에서 실행됩니다. 즉, 콘솔에 로그인하거나 'su'를 실행할 때입니다. 이러한 경우 완료 작업이 수행되므로 / etc / profile이 작동합니다. 남은 것은 ~ / .bashrc입니다. '라인을 확인하십시오. / etc / bash_completion '이 실제로 실행되고 있습니다. 앞에 'echo OK'와 같은 것을 넣고 새 터미널을 열고 'OK'라고 표시되어 있는지 확인하십시오.
angus

ZSH를 테스트 한 적이 있습니까?
Mohammad Efazati

.bashrc가 완전히 누락되었을 수 있습니다. 이것은 나의 경우였다
Galvani

답변:


6

귀하의 /etc/bash_completion파일이 없습니다해야합니다.

sudo apt-get install bash-completion

모든 문제를 해결해야합니다.

/etc/bash.bashrcFaheem Mitha 및 다른 사람들이 지적했듯이 이미 주석 처리되지 않은 줄이 있다고 가정하면 다음 과 같이 작동합니다.

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

이유 : bash-completion패키지에는 이제 해당 파일 (/ etc / bash_completion)이 있습니다. 그것은 bash패키지에 있었지만 더 이상은 아닙니다.

패키지 변경에 대한 정보


/ etc / bash_completion 파일 에 무엇이 있어야 합니까? install bash-completion 명령을 실행했는데 모든 것이 이미 최신 버전이지만 내 bash 완료 파일이 비어 있습니다
fifamaniac04

2

이것을 실행하십시오 :

chsh -s /bin/bash $USER

1

이것이 필요한지 기억할 수 없지만, 주석 처리가되어 /etc/bash.bashrc있지 않은 경우 해당 행의 주석 처리를 제거하십시오.

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

0

내가 기억 하듯이 명령 매개 변수에 대한 bash 자동 완성은 명령을 통해 수행됩니다 complete. 루트 사용자 bashrc (아마도 /root/.bashrc)가로드 한 apt-get complete 스크립트가 있어야하며이를 실행하려면 루트 로그인이 필요합니다. Sudo는 루트 로그인 스크립트를로드하지 않고 단지 권한을 부여합니다.

루트가 아닌 사용자를위한 자동 완성 스크립트가 누락되어 apt-get에 대해 bash 자동 완성이 구성되어 있지 않을 수 있습니다. 이것이 사실이면 sudoers 파일 내에서 모든 권한을 가진 사용자를 위해 해당 기능을로드하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.