내가 해결한 방법

내가 해결한 방법

저는 Debian Jessie 8.6을 사용하고 있습니다. apt-get패키지 및 명령에 대해 탭을 누를 때 예상되는 bash 자동 완성을 얻지만 이를 사용하려고 하면 apt작동하지 않는 것으로 나타났습니다 . xubuntu 16.04가 작동했던 것을 기억하는데 여기서는 작동하지 않는 것이 이상하다고 생각합니다. 명령에도 활성화할 수 있는 방법이 있나요 apt? 그렇다면 어떻게?

답변1

데비안에는 'bash-completion'이 설치 및 활성화되어 있지 않습니다.

예를 들어 데비안이 미리 설치되어 있고 기본적으로 활성화되어 있는 Ubuntu 배경에서 Debian을 사용한다면 이것이 혼란의 원인이 될 수 있습니다.

이를 활성화/'수정'하려면 루트로 실행하십시오:

apt-get install bash-completion

그런 다음 두 가지 옵션이 있습니다. 다음 중 하나를 수행할 수 있습니다.

 1. 사용자별로 활성화하거나

 2. 전역적으로 활성화합니다.

1. 귀하의 사용자에 대해서만 활성화하려면 편집하여 ~/.bashrc다음을 추가하십시오.

    if [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
    fi

로그아웃했다가 다시 로그인하지 않고 시도해 보려면 다음을 실행하세요.

    . ~/.bashrc

아니면 새로운 쉘을 열어보세요. 그런 다음 apt와 함께 탭 완성을 사용해 보십시오. 시작 부분의 점과 공백( .)은 bash에서 키워드를 사용하는 것과 동일 source하지만 이식성이 더 좋습니다.

루트 계정에 로그인했을 때 작동하도록 하려면 루트의 홈 디렉터리(일반적으로 ) su에서 동일한 작업을 수행합니다 ./root

2.전역적으로 활성화하려면 (1) 대신 파일에 저장하세요 /etc/bash.bashrc.

이것이 왜 작동하는지 궁금해하는 사람에게는 .앞의 /etc/bash_completion것이 작동합니다.~ 아니다주위에 공백이 있으므로 현재 디렉토리를 참조하십시오. 대신에 새로운 하위 쉘에서 실행되는 대신 주어진 파일의 내용이 현재 실행 중인 쉘에서 평가되도록 합니다.여기서는 표준화되어 있습니다.

Bash에서 이것은 .명령으로 대체될 수 있지만 sourcePOSIX에 의해 표준화되지 않았고 이식성이 떨어지기 때문에 사람들이 사용하지 못하게 하는 경향이 있습니다. 이 경우 Bourne Shell이나 에서 작동해야 하는 프로그램이 아니라 특별히 bash를 확장하기 위한 프로그램이므로 가독성을 위해 ksh자유롭게 대체할 수 있습니다 source.

덧붙여서, 이 동작(하위 셸을 열지 않음)은 DOS/Windows .BAT 스크립트가 정상적으로 작동하는 방식과 유사하여 스크립트가 실행되는 셸의 상태를 변경합니다. 이것이 바로 cd셸 스크립트에서 다른 경로로 들어가는 이유입니다. , .BAT에 있는 것처럼 스크립트가 종료될 때 해당 경로에 있지 않습니다.

답변2

Debian 9 Stretch에서는 /etc/bash.bashrc를 편집하고 주석을 제거하세요.

# 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

답변3

내가 해결한 방법

wget자동 완성을 시도할 때 자동 완성 문제가 있었고 아래 파리에서 매개변수를 apt-get install wg[TAB][TAB]제거하여 문제를 해결했습니다 .--no-generate

/usr/share/bash-completion/completions/apt-cache
/usr/share/bash-completion/completions/apt-get

이러한 파일은 를 설치한 후에만 사용할 수 있다는 점을 언급할 가치가 있습니다 bash-completion.

내가 언급하는 매개 변수 --no-generate는 아래 줄에서 볼 수 있지만 --no-generate이 줄뿐만 아니라 ALL도 제거했습니다. https://github.com/scop/bash-completion/blob/master/completions/apt-get#L28

내가 어떻게 이 지경까지 왔는가?

set -v이전에 실행한 후 이 지점에 도달했는데 apt-get install wg[TAB][TAB], 실행된 명령은 다음과 같습니다.

apt-cache --no-generate pkgnames wg

출력은 오류였습니다.

E: Could not open file  - open (2: No such file or directory)

apt-cache pkgnames wg없이 실행했을 때 --no-generate자동 완성 목록을 올바르게 얻었습니다.

root@484f5c8f56ba:/# apt-cache pkgnames wg
wgalician-minimos
wget2
wgaelic
wget
wgerman-medical
wget2-dev

도움이 되었기를 바랍니다.

답변4

Ubuntu의 /usr/share/bash-completion/completions/apt 구성 파일을 Jessie의 동일한 디렉터리에 복사하세요. 여기에서 파일을 얻을 수도 있습니다.http://pastebin.com/PRBMt3an

관련 정보