키를 누른 상태에서 Tab 키만 누르면 폴더를 완성할 수 있습니다

키를 누른 상태에서 Tab 키만 누르면 폴더를 완성할 수 있습니다

다음과 같은 디렉터리가 있다고 가정해 보겠습니다.

 foo/
   bar.js
   bar/

foo에 들어가서 cd"ba"를 입력하고 탭을 누르면 파일 이름이 폴더와 겹쳐서 완료할 수 없습니다.

폴더(또는 파일)만 제공하는 탭을 누르고 있을 수 있는 키가 있나요?

답변1

TL,DR: . /etc/bash_completion에 추가하세요 .bashrc.

정확한 질문에 대답하기 위해 그러한 기본 제공 명령이 없습니다. 배쉬는주문하다다양한 유형의 개체(파일 이름, 사용자 이름, 변수 이름 등)를 완성하지만 디렉터리에만 국한되지는 않습니다.

그러나 고대 버전의 bash를 실행하지 않는 한 다음을 사용할 수 있습니다.상황에 맞는 완성, 2000년에 출시된 버전 2.04에 추가된 기능입니다. 일부 배포판에서는 기본적으로 이를 활성화하므로 설치해야 합니다.bash-completion패키지화하여 ~/.bashrc. 대부분의 배포판에서는 이라는 패키지를 제공 bash-completion하고 여기에 활성화 스크립트를 넣습니다 /etc/bash_completion. 즉, .bashrc다음 줄을 포함해야 합니다.

. /etc/bash_completion

cd이후에는 를 입력 하고 를 누르면 디렉토리명만 완성됩니다 Tab.

비구식 버전의 bash(≥4.0)를 사용하는 경우 shopt -s autocdyour를 입력한 .bashrc다음 명령을 생략하여 대신 cd쓸 수 있습니다 . 탭 완성은 줄의 첫 번째 단어에 표시됩니다. 명령 이름과 디렉터리를 완성합니다. 이름(및 )을 현재 디렉터리에 저장합니다.barcd bar$PATH$CDPATH

Bash 4.0에서는 함수의 명령줄 버전을 직접 작성할 수도 있습니다(이전 버전도 작동했지만 어려움을 겪어야 했습니다). 그러니 정말로 원한다면 그렇게 할 수 있습니다.Bash 명령 완성을 사용자 정의하는 방법은 무엇입니까?상대적으로 복잡한 예가 있습니다. 다른 예를 검색하여 찾아보세요 READLINE_LINE.complete

답변2

입력한 후에 완료되지 않는 이유 는 앞에 명령을 입력 ba하지 않기 때문입니다 ba. cdBash는 bar.js<ENTER>입력하거나 입력하는 것이 bar<ENTER>의미가 없다는 것을 인식합니다(하나는 디렉터리이고 다른 파일은 bar.js디렉터리에 없거나 $PATH실행 권한이 설정되지 않음). 따라서 전혀 완료를 제공하지 않습니다.

그러나 디렉토리 이름 앞에 다음을 붙이면 cd:bar

$ ls
bar  bar.js
$ cd <TAB>

이 시점에서 프롬프트는 다음과 같이 변경됩니다.

$ cd bar/ # This line

관련 정보