저는 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에서는 이것을 .
command 로 대체할 수 있지만 source
POSIX 표준화가 아니고 이식성이 떨어지기 때문에 사람들이 멀리하는 경향이 있습니다. 이 경우 bash를 확장하기 위해 특별히 설계된 프로그램이고 Bourne Shell에서 작동해야 하는 프로그램이 아니기 때문에 원하는 대로 가독성을 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