Bash에서 CD의 와일드카드 자동 완성

Bash에서 CD의 와일드카드 자동 완성

우분투에서 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기본값(와일드카드 완성이 적용됨)으로 재설정되고 다른 내용은 변경되지 않습니다.

관련 정보