저는 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에서 이것은 .
명령으로 대체될 수 있지만 source
POSIX에 의해 표준화되지 않았고 이식성이 떨어지기 때문에 사람들이 사용하지 못하게 하는 경향이 있습니다. 이 경우 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