명령에 탭 완성 기능이 작동하지 않습니다


50

모든 최신 업데이트를 실행하는 Ubuntu 11.04 Beta 1의 명령에 탭 완성을 사용하려고하는데 작동하지 않는 것 같습니다. (패키지 bash-completion이 설치되어 있지만)

탭 완성은 디렉토리 나 파일에 대해서만 올바르게 작동합니다.

발굴 할 아이디어가 있습니까?


답변:


67

.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 [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

감사! .bashrc를 내 것으로 교체했기 때문에 문제가 무엇인지 알 수 없었습니다. 이제 완벽하게 작동합니다.
Screatch

이것은 xubuntu 12.04에서도 git bash 자동 완성을 수정했습니다. 많은 감사합니다.
palmic

커맨드 라인 apt-get의 스위치 및 옵션에 대한 자동 완성은 어떻습니까? 즉, apt-get ins 를 입력 한 다음 탭을 눌러 자동 완성하십시오.
Reza Ghodsi

3
bash-completion이것이 작동 하려면 패키지 가 필요 하다는 것을 추가하고 싶습니다 . 이상하게도, 우리 회사의 표준 설치에는이 패키지가 없습니다.
Edgar

13

나는 또한 bash 완성 실패에 대해 다음과 같은 추가 설명을 추가 할 것이라고 생각했다. 주석이 너무 길어서 bash 완성에 문제가있는 사람에게 유용 할 수 있습니다. 모든 중복이 참조됩니다.

당신이 적절한 선을 경우에도 귀하 .bashrc와 (위의 대답으로) bash-completion당신이 중 하나가있는 경우 설치된 패키지, bash는 완성은 여전히 제대로 작동 할 수 있습니다 shopt -s nullglob또는 shopt -s failglob귀하의 .bashrc또는 .bash_aliases.

다음 시나리오는 적절한 사용자 정의 bash 완료 라인 이 설치되어 있고 적절한 테스트를 수행하기 위해 모든 사용자 정의 를 사용하여 테스트 .bashrc하고 .bash_aliases제거하여 공정한 테스트를 제공합니다 ..bashrcbash-completion

1) 첫 번째 시나리오는 또는 shopt -s failglob에 있을 때 입니다..bashrc.bash_aliases

완전한 디렉토리와 파일을 각각 탭하려고 할 때 다음 오류가 발생합니다.

cd Dbash: no match: "${COMP_WORDS[@]}"  
cat pabash: no match: words[0]=${!ref}${COMP_WORDS[i]}

그러나 명령은 여전히 ​​성공적으로 완료됩니다.

2) shopt -s nullglob활성화되면 디렉토리 또는 파일을 탭 완성하려고하면 완료되지 않고 모든 것이 나열됩니다.

cd Do
.adobe/                  .gimp-2.6/               Podcasts/
.aptitude/               .gnome2/                 Public/
.audacity-data/          .gnome2_private/         .pulse/
............

목록이 너무 길어서 모든 것을 재현 할 필요가 없기 때문에 여기에서 목록을 줄였습니다.

그러나 명령 완료는 여전히 작동합니다.

따라서 적절한 줄이 있고 설치 되었다고 가정하면 bash 완료 오류의 문제를 제거 shopt -s failglob하거나 shopt -s nullglob해결할 수도 있습니다 ..bashrcbash-completion


1
{!이 심판} 단어 [0] = $가 $ {COMP_WORDS [내가]} >> 내가 탭 완성을 시도하고 오류가 발생했을 때 좋은 설명, 내 문제를 해결
bagustris

이것이 해결 방법으로 작동하지만 완성 프로그래머가 의지하는 것은 좋지 않습니다. 널 글로브 (명목상 많은 사람들에게 더 낫다)와 친족이 설정 될 수 있기 때문에, 이전 의미론 (일치하는 와일드 카드가 와일드 카드 자체를 초래 함)을 필요로하는 완전한 코드는 현재 글로브 설정을 저장하고 필요한 것을 설정하고 복원해야합니다. IFS가 일반적으로 사용되는 것처럼 나중에 구형 설정이 적용됩니다.
Alex North-Keys

10

/etc/bash.bashrc파일 수정 (다른 답변) 외에도 bash-completion패키지 를 설치해야 할 수도 있습니다 .

/etc/bash_completion파일이 존재하는지 확인하십시오 . 그렇지 않은 경우 :

sudo apt-get install bash-completion

(데비안 7의 설치에는 처음에 설치되지 않았습니다)


7

기본적으로 bash가 활성 쉘인지 확인하십시오.

echo $SHELL

방금 Ubuntu 14.04.1 LTS로 업그레이드 했으며이 게시물의 조언을 따른 후에도 내 쉘이 설정 /bin/sh되지 않았 음을 알기 위해 탭 자동 완성 기능이 없었습니다 /bin/bash.


2

우분투 14.04.01로 업데이트

.bashrc에 다음 조각이 있는지 확인하십시오 (기본적으로 있어야 함).

sudo vim /etc/bash.bashrc (파일을 편집하려면 "i"를 입력하십시오)

    # enable bash completion in interactive shells
    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

위의 7 줄 주석 해제

파일 저장 "esc + w + q + enter"

bash를 다시 시작하십시오.

exec bash


1
이것은 무엇을 할 것인가? 기본적으로 이와 같지 않습니까?
Tim

@Tim이 말했듯이 해당 구성은 기본 구성으로 제공됩니다.
ssoto

이것은 나를 위해 일한
Thamaraiselvam

이 답변은 매력처럼 작동했으며 부정적인 투표를하고 있습니까 ???
greuze
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.