나는 탭 완성이 셸의 표준 기능이 된 이후로 매우 만족스러운 사용자였습니다. 나는 Bash의 스마트 완성 기능(evince foo<TAB>을 입력하면 PDF 파일만 검색함)도 마음에 듭니다.
Bash가 스마트 완성을 사용하여 완료를 거부하면 행복한 하루를 망칠 수 있습니다.
오늘 내가 원하는 것:
tar xvf centos5.8_x86_1.ova
그래서 나는 다음을 입력합니다:
tar xvf cent<TAB>
.ova 파일은 일반적으로 tar에서 사용하는 파일이 아니기 때문에 Bash는 경로 완성을 거부합니다.
bash-completion 패키지를 제거하여 스마트 완성을 제거할 수 있다는 것을 알고 있습니다. 그런데 케이크도 먹고 먹어도 될까요?
bash에 먼저 스마트 완성을 사용하도록 요청하고, 실패하면 스마트 완성이 아닌 것을 사용할 수 있나요?
답변1
tar, vim 및 emacs 프로그램에 대한 모든 "스마트" 완료가 실패한 후 다음 명령은 정상적인 bash 완료를 활성화해야 합니다.
compopt -o bashdefault tar vim emacs
또한보십시오관련 페이지온라인 bash 매뉴얼에 있습니다.
참고: 현재 명령에 대한 스마트 완성으로 정의된 완성 유형(명령/파일 이름/사용자 이름 등)에 대한 정상적인 동작을 얻게 됩니다. 예를 들어 를 호출하더라도 완성은 service
파일 이름을 완성하지 않습니다 complete -o bashdefault service
.
이 경우와 스마트 자동 완성이 실패하는 다른 경우에는 언제든지 Alt-/
(또는 M-/
bash 매뉴얼 표기법에서)를 눌러 완료 할 수 있습니다.파일 이름스마트 완성이 비활성화된 경우 TAB이 작동하는 방식과 거의 동일합니다( M-/
비슷한 모드를 완료하지 않는다는 점에서 거의 동일한 방식 *.txt
). 바라보다여기명령 및 사용자 이름과 같은 다른 유형의 완성에 사용되는 키 입력 시퀀스입니다.
답변2
올레 씨 :-),
케이크도 먹고, 먹어보세요:
<tab>
bash가 언제 완료될지에 대한 최선의 추측을 제공할 것입니다. 아시다시피 때로는 이것이 잘못된 경우도 있습니다.
그러나 bash의 완성이 불완전한 경우 M-/
( ALT
++ ( 덴마크어 키보드에서는 왼쪽 , 오른쪽이 아님 )) SHIFT
은 강제로 파일로 완성됩니다. 그래서 파일로 강제로 완성하고 싶을 때 이것을 사용합니다.7
ALT
AltGr
M-/
나에게 그것은 두 세계의 최고입니다.
답변3
bash 완성은 그 자체가 bash 프로그램인 bash 표준 완성의 확장입니다. 따라서 프로그램 작동 방식을 변경하려면 변경하면 됩니다. 이것은 무료 소프트웨어이므로 자유롭게 사용할 수 있습니다. 이 명령의 특정 경우 tar
파일은 입니다 /usr/share/bash-completion/completions/tar
. tar
확장자를 가진 파일을 자동 완성 하려면 ova
해당 줄에 추가하면 됩니다.
local tars='@(@(tar|gem|spkg)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'
그래서 말한다
local tars='@(@(tar|gem|spkg|ova)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'
이는 Debian Wheezy(현재 안정 버전)의 경로 및 기존 코드입니다. 배포판이나 버전마다 코드가 다를 수 있지만 아이디어는 동일합니다. 코드를 열고 원하는 작업을 수행하도록 조정하세요.
편집: 방금 문제는 일치하는 항목을 찾지 못하고 추가하는 것이 아니라 매번 특정 ova
사례 에 관한 것이라는 것을 알았습니다 tar
. 어쩌면 누군가에게 소스를 찾을 수 있는 위치를 알려주는 것이 여전히 유용할 수도 있습니다.