Bash 완료 시 구문 오류가 발생합니다.

Bash 완료 시 구문 오류가 발생합니다.

질문:

현재 내가 있는 디렉터리에 있는 "build"라는 디렉터리로 변경하려고 한다고 가정해 보겠습니다. 나는 시작한다:

cd b

그런 다음 Tab 키를 한 번 누릅니다(현재 디렉터리에 문자로 시작하는 다른 디렉터리가 없음을 알고 있음 b). 필요에 따라 뒤로 클릭하거나 변경하거나 향상할 준비가 된 다음을 보고 싶습니다.

cd build

그러나 Linux Peppermint 3을 실행하는 넷북에서 탭 버튼을 누르면 다음과 같은 일이 발생합니다.

cd bbash: command substitution: line 74: syntax error near unexpected token `done'
bash: command substitution: line 74: `            done'

내가 시도한 것들:

  • "bash-completion" 패키지를 다시 설치해 보았지만 눈에 띄는 효과는 없었습니다.

  • 파일, 특히 74행을 살펴봤지만 /etc/bash_completion분명히 수정해야 할 부분( )을 찾을 수 없습니다 complete -f -X '*.Z' compress znew. 어쩌면 내가 잘못된 파일을 찾고 있는 것일 수도 있습니다.

  • , 등의 명령에 대한 완성 기능이 제대로 git작동하는 것으로 나타났습니다 . 그러나 파일 이름을 자동 완성하려는 시도 도 작동하지 않습니다.geditnodekate

  • 디버그를 실행하면 bash -x많은 코드가 터미널에 인쇄됩니다. 이것이 마지막 부분입니다(주석 참고).

    + toks=(${toks[@]-} $(
        compgen -d -- "$quoted" | {
            while read -r tmp; do
                # TODO: I have removed a "[ -n $tmp ] &&" before 'printf ..',
                #       and everything works again. If this bug suddenly
                #       appears again (i.e. "cd /b<TAB>" becomes "cd /"),
                #       remember to check for other similar conditionals (here
                #       and _filedir_xspec()). --David
                printf '%s\n' $tmp
            done
        }
    ))
    bash: command substitution: line 74: syntax error near unexpected token `done'
    bash: command substitution: line 74: `            done'
    

    언급된 조건을 다시 추가하려고 시도했지만 효과가 없었습니다.

  • 임시 삭제도 해봤 etc/bash_completion.d지만 소용이 없습니다.

  • 완성된 목록을 보려고 했지만 complete -p내가 무엇을 찾고 있는지 잘 모르겠습니다.

최종 요청

필요한 경우 쉘 스크립트를 직접 작성하고 싶습니다. 이 과정에서 이에 대해 더 자세히 알아볼 수 있습니다. 정말 고치고 싶습니다. 어떤 제안이라도 감사하겠습니다.

답변1

Bash 완성은 모듈식입니다. 다양한 패키지가 자체 완성 확장을 제공합니다. 다른 패키지에 오류가 있을 수 있습니다. mv /etc/bash_completion.d{,.old}문제가 해결되는지 확인해 보세요 . 그렇다면 다시 뒤로 이동하고 mv /etc/bash_completion.d{.old,}개별 파일을 디렉터리 밖으로 하나씩 이동하여 문제를 일으키는 파일을 찾으십시오. /etc/bash_completion.d(이 디렉토리는 페퍼민트에서는 이름이 약간 다를 수 있습니다.)

답변2

아직 공식적으로 언급할 수는 없으므로 다른 방향을 가리키는 부분 답변을 제공하겠습니다. 키 바인딩을 확인할 수 있나요?

$ bind -p | grep -i tab

나는 과거에 사람들이 Tab 키를 기능에 연결하기로 결정한 상황에 직면했습니다. 또 다른 옵션은 다음과 같이 "-x" 매개변수를 사용하여 bash 쉘을 분기하는 것입니다.

$ bash -x

테스트를 반복하세요. 대신 사용하는 경우에도 echo이런 일이 발생합니까 cd?

$ echo b <tab>

관련 정보