공백이 추가 된 배쉬 자동 완성 – 왜, 어떻게 고쳐야합니까?


29

글자를 입력하는 것보다 탭 완성을 사용합니다. 나는 타이핑하는 데 사용 했고 다음 단계를 계속할 수 있도록 rm ~/De<TAB>완성되었습니다 rm ~/Desktop/.

최근에 그 행동이 바뀌었다. 완료 rm ~/Desktop<SPACE>는 이제을 산출 합니다. 즉, 계속하려면 백 스페이스를 입력하고 슬래시를 입력해야합니다. 이것은 나를 울게한다.

변경 사항은 기능에있는 것 같다 _longopt()에서 /etc/bash_completion그러나 그것은 지금까지 내가 따를 수있다. 이 변경은 의도적 인 것이며, 그렇다면 어떤 것이 좋습니까? 다른 시스템에서 이전 코드를 복사하는 대신 구성 옵션을 사용하여 이전 동작을 되돌릴 수 있습니까?

편집 : 참조 기능.

_longopt()
{
    local cur prev split=false
    _get_comp_words_by_ref -n = cur prev

    _split_longopt && split=true

    case "$prev" in
        --*[Dd][Ii][Rr]*)
            _filedir -d
            return 0
            ;;
        --*[Ff][Ii][Ll][Ee]*|--*[Pp][Aa][Tt][Hh]*)
            _filedir
            return 0
            ;;
    esac

    $split && return 0

    if [[ "$cur" == -* ]]; then
        COMPREPLY=( $( compgen -W "$( $1 --help 2>&1 | \
            sed -ne 's/.*\(--[-A-Za-z0-9]\{1,\}\).*/\1/p' | sort -u )" \
            -- "$cur" ) )
    elif [[ "$1" == @(mk|rm)dir ]]; then
        _filedir -d
    else
        _filedir
    fi
}

~ / Desktop이 파일이거나 디렉토리 인 경우 이것이 의미가 있음을 알 수있는 유일한 방법 입니다. 명령이 좋아에 대한 그리고 두 번째 경우에, 그에만 유용 rmdir하지 않는, mkdir또는 touch.
l0b0

_longopt()함수 본문을 게시 할 수 있습니까?
Aleksandr Levchuk

@MPi : 완료는 명령 (명령 줄의 첫 단어)에 따라 달라질 수 있습니다. 또한 readline설정 ( ~/inputrc파일이 있습니까?)과 항목이 실제 디렉토리이거나 디렉토리에 대한 심볼릭 링크라는 사실에 따라 달라질 수 있습니다 .
enzotib

물론 완성은 줄의 첫 단어에 달려 있습니다. 그렇기 때문에 때로는 환상 명령을 사용하여 완료를 속이고, 보내기 전에 실제 명령으로 변경하는 것입니다. 그리고 나는 .inputrc이 시스템에 더 이상 없다. (이것은 백 스페이스와 커서 키를 수정 한 시절이었습니다 ...) 그리고 모든 요소, 디렉토리 또는 파일, symlink에 대해 발생합니다.
MPi

1
훌륭한 질문, 나는 똑같은 행동을 관찰했으며, 그것은 나를 귀찮게합니다. 그러나 그 이유에 대해서는 전혀 모른다.
Christoph

답변:


22

이것은 알려진 버그입니다. LP 질문과 버그 1 2를 참조하십시오 .

이 의견이 해결책 인 것 같습니다. 수정 사항이 정상 채널을 다운시킬 때까지 기다릴 수없는 경우 /etc/bash_completion1587 행을 편집 default하여 filenames(백업 먼저 작성)으로 변경하십시오.


3
요약 : 버그 입니다. /etc/bash_completion1587 행 을 편집하여 패치가 도착할 때까지 로컬로 수정할 수 있습니다 .로 변경 default하십시오 filenames.
MPi

내 anwer 수정
Christoph

9

Ubuntu 12.04에 Adobe Reader를 설치 한 후 동일한 문제가 발생했습니다.

_filedir블록을 주석 처리 /etc/bash_completion.d/acroread.sh했으며 정상적으로 다시 작동했습니다.


오늘 날짜부터 이것은 나를 위해 일한 것입니다.
John Moeller

1
여기에서도 동일합니다 : acroread가 트리거하고 _filedir블록을 주석 처리 했습니다 (오른쪽 상단). 모든 쉘에서 'exec bash'를 로그 아웃하거나 실행해야 효과를 볼 수 있습니다 ( 이 질문 참조) .
dirkjot 2016 년

2

나는 같은 문제가 있었고 /etc/bash_completion.d/ 디렉토리를 제거한 다음 bash_completion을 다시 설치하여 문제를 해결했습니다. 오래된 파일이이 디렉토리에 있다고 생각합니다. 잘하면 문제가 해결되기를 바랍니다.


이 남자와 같은 : timlabath.com/words/2011/05/10/…
유형

2
이 문제는 실제로 해결되었습니다. 그러나이 방법은 많은 완성을 버리기 때문에 너무 급진적입니다. 패키지를 삭제 한 후 bash-completion남은 파일 중 하나가 /etc/bash_completion.d/범인이어야합니다. 그것은이었다 acroread.sh내 경우 - 그것은 다시 정의합니다 _filedir.
MPi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.