다음과 같은 디렉터리가 있다고 가정해 보겠습니다.
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 autocd
your를 입력한 .bashrc
다음 명령을 생략하여 대신 cd
쓸 수 있습니다 . 탭 완성은 줄의 첫 번째 단어에 표시됩니다. 명령 이름과 디렉터리를 완성합니다. 이름(및 )을 현재 디렉터리에 저장합니다.bar
cd bar
$PATH
$CDPATH
Bash 4.0에서는 함수의 명령줄 버전을 직접 작성할 수도 있습니다(이전 버전도 작동했지만 어려움을 겪어야 했습니다). 그러니 정말로 원한다면 그렇게 할 수 있습니다.Bash 명령 완성을 사용자 정의하는 방법은 무엇입니까?상대적으로 복잡한 예가 있습니다. 다른 예를 검색하여 찾아보세요 READLINE_LINE
.complete
답변2
입력한 후에 완료되지 않는 이유 는 앞에 명령을 입력 ba
하지 않기 때문입니다 ba
. cd
Bash는 bar.js<ENTER>
입력하거나 입력하는 것이 bar<ENTER>
의미가 없다는 것을 인식합니다(하나는 디렉터리이고 다른 파일은 bar.js
디렉터리에 없거나 $PATH
실행 권한이 설정되지 않음). 따라서 전혀 완료를 제공하지 않습니다.
그러나 디렉토리 이름 앞에 다음을 붙이면 cd
:bar
$ ls
bar bar.js
$ cd <TAB>
이 시점에서 프롬프트는 다음과 같이 변경됩니다.
$ cd bar/ # This line