명령 대체 내에서 Bash 탭 완료가 실패함

명령 대체 내에서 Bash 탭 완료가 실패함

나는 한동안 프로그램을 종료하기 위해 Kill $(pidof )를 사용해 왔으며 어젯밤부터 탭 완성을 사용하려고 할 때마다 $()오류가 발생했습니다.

bash: unexpected EOF while looking for matching `)'
bash: syntax error: unexpected end of file

탭 완성은 명령 대체 외부에서도 잘 작동합니다.

내 질문은 Ubuntu 시스템에서 탭 완성을 위한 구성 파일이 어디에 있습니까? 누군가 이 특정 문제를 겪었거나 내가 할 수 없는 것이 무엇인지 명확하게 알 수 있는 경우 이 문제를 해결하는 방법 및/또는 이런 일이 발생하는 이유는 무엇입니까? (항상 이유가 궁금했습니다.) 그렇지 않은 경우 이 문제 조사를 어디서 어떻게 시작해야 하는지 알려주시면 감사하겠습니다.

고쳐 쓰다

탭 완성 시 $(pidof더 이상 오류가 발생하지 않지만 이제는 전혀 작동하지 않습니다. 나는 이전에 bash 내부를 실제로 망쳐본 적이 없지만 손이 더러워지는 것을 두려워하지 않습니다. 어떤 지침이라도 대단히 감사하겠습니다.

답변1

내 질문은 Ubuntu 시스템에서 탭 완성을 위한 구성 파일이 어디에 있습니까?

우분투에서는 bash-completion 라이브러리가 /usr/share/bash-completion/bash_completion.

이 라이브러리는 셸을 시작할 때 여러 가지 방법으로 얻을 수 있습니다. 예를 들어,

  • ~/.bashrc-> /etc/bash_completion->/usr/share/bash-completion/bash_completion

  • /etc/profile-> /etc/profile.d/bash_completion.sh->/usr/share/bash-completion/bash_completion

누군가 이 특정 문제를 겪었거나 내가 할 수 없는 것이 무엇인지 명확하게 알 수 있는 경우 이 문제를 해결하는 방법 및/또는 이런 일이 발생하는 이유는 무엇입니까? (왜인지 항상 궁금합니다.)

나는 최근에 대답했다관련된 질문AskUbuntu에서 (그리고 그 과정에서 질문을 찾았습니다) 거기에서 자세한 내용을 찾아보세요.이것은 알려진 버그입니다..

이 문제를 해결하려면 다음을 수행하세요.

  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의 문제를 해결할 때까지 기다리십시오.

관련 정보