
우분투에서 bash 사용(debian jessie/sid) 와일드카드에 대한 탭 완성을 수행할 수 없는 이유를 모르겠습니다.내장 명령 사용.
예를 들어 현재 작업 디렉터리에 다음 하위 디렉터리가 포함되어 있다고 가정합니다.
% ls -l
drwxr-xr-x 2 userX 4096 2016-08-31 11:46:40 0830a/
drwxr-xr-x 2 userX 4096 2016-08-31 11:46:52 0830b/
drwxr-xr-x 2 userX 4096 2016-08-31 11:47:33 0831a/
drwxr-xr-x 2 userX 4096 2016-08-31 11:47:18 0831b/
drwxr-xr-x 2 userX 4096 2016-08-31 11:50:38 z0830z/
"ls -l *31a"를 입력한 후 [tab]을 누르면 완료됩니다.
ls -l *31a<tab>
완료되었습니다...
ls -l 0831a
그러나 내장된 "cd" 명령을 사용하여 동일한 작업을 수행하려고 하면 완료되지 않습니다.
cd *31a<tab>
..완료되지 않습니다
또한 후행 와일드카드를 사용하면 실패합니다.
cd z*<tab>
..완료되지 않습니다
흥미롭게도, 내장 함수에서는 와일드카드 없이 완성이 잘 작동합니다. 예를 들어 다음과 같은 완성 작업이 제대로 수행되도록 할 수 있습니다.
cd z<tab>
완료되었습니다 ...
cd z0830z/
또한 "cd *31a" 명령을 있는 그대로 사용하여 성공하도록 할 수 있습니다(고유한 경우에 한함). 하지만 나는 확장이 일어나서 내가 무엇을 하고 있는지 확신할 수 있기를 원합니다.
내 .inputrc에 다음이 포함되어 있습니다.
$if Bash
Space: magic-space
set mark-directories on
set mark-symlinked-directories on
set completion-ignore-case off
set show-all-if-ambiguous on
$endif
~/.bash_completion 파일이 없습니다. /usr/share/bash-completion/bash_completion만 제공하는 /etc/bash_completion이 있습니다. 후자의 파일은 약간 길기 때문에 여기에 포함시키지 않겠습니다.
나의 궁극적인 목표는 cd 명령에 와일드카드 완성 기능을 제공하는 것입니다.
답변1
나는 같은 문제로 어려움을 겪고 있습니다. @Gilles가 언급했듯이 아직 실제 bash 기반 솔루션은 없습니다.
bash-completion
실제로 많은 기능을 추가하지 않기 때문에 cd
(내가 아는 한 디렉토리만 사용 $CDPATH
), 사용하지 않는 경우 다음을 추가할 수 있습니다 ~/.bashrc
.
compopt -o bashdefault cd
이렇게 하면 완료 동작이 cd
기본값(와일드카드 완성이 적용됨)으로 재설정되고 다른 내용은 변경되지 않습니다.