명령 대체에서 깨진 bash 완료를 수정하는 방법은 무엇입니까? [복사]

명령 대체에서 깨진 bash 완료를 수정하는 방법은 무엇입니까? [복사]

bash-completion내 것이 손상된 것 같습니다 . 명령 대체를 사용하려고 할 때마다(예: 다음을 입력할 때)

ls $(ls Deskto<Tab>

..나오다..

ls $(ls Desktobash unexpected eof while looking for matching ")".

.bashrc내 파일을 삭제하고 cp /etc/skel/bashrc ~/새 파일을 얻으려고 했습니다 . 새로운 bashrc에 뭔가를 추가하기 전까지는 작동하지 않았습니다. 해도 echo '#" >> ./.bashrc또 깨집니다. 광산을 삭제해도 bash_aliases도움이되지 않았습니다.

sudo apt-get install --reinstall bash-completion그것도 안 했어 . 그러나 유사한 문제에 대한 일부 스레드가 있지만 소용이 없습니다.

어떤 조언이라도 대단히 감사하겠습니다! :)

답변1

당신의 것은 bash-completion실제로 "깨진" 것이 아닙니다. 단지알려진 버그bash-completion 2.1 및 Bash 4.3과 함께 사용됩니다.

나는 최근에 대답했다관련된 질문AskUbuntu에서그리고 또 여기, 하지만 제가 여기 왔으니 이 질문을 구글링하는 사람들도 여기에서 답을 찾을 수 있도록 여기에도 답변하겠습니다.

자세한 내용을 알려드렸습니다Ask우분투, 그러나 본질적으로 이 문제를 해결하려면 다음을 수행할 수 있습니다.

  1. 바꾸다

    [[ ${!2} == \$* ]] && eval $2=${!2}
    

    그리고

    [[ ${!2} == \$\'* ]] && eval $2=${!2}
    

    _quote_readline_by_ref파일의 함수에서 /usr/share/bash-completion/bash_completion(권장되지 않음)

  2. 최신 Git 버전 보기배쉬 완성 라이브러리그리고 그것을 사용하세요. 이 버전에서는 버그가 수정된 것 같습니다.

이러한 솔루션 중 하나를 사용하면 명령 대체에서 탭 완성을 다시 사용하지 않지만 적어도 해당 오류 메시지는 다시 표시되지 않습니다.

실제로 명령 대체에서 탭 완성을 구현하려면 이전 버전의 Bash로 되돌려야 합니다(효과가 있다고 들었어) 또는 라이브러리가 실제로 Bash 4.3의 문제를 해결할 때까지 기다리십시오.

답변2

이 문제를 일으킬 수 있는 한 가지는 키워드에 별칭을 지정하는 것입니다 . , 등 local의 별칭 키워드를 사용하지 마세요 .localdodone

답변3

/etc/bash_completion먼저 그것이 어떻게 생겼는지 살펴 보겠습니다 .

. /usr/share/bash-completion/bash_completion

(줄의 시작 부분을 놓치지 마세요 .) 그래도 도움이 되지 않으면 bash 파일에서 모든 링크를 찾으려고 노력하겠습니다.

find / -name *bash* -type f -exec grep -l completion {} \+ 2>/dev/null

그리고 오류가 있는지 확인하세요. 일부 파일에는 다음 코드가 있어야 합니다.

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

관련 정보