bash 자동 완성 후행 점을 방지하는 방법은 무엇입니까?

bash 자동 완성 후행 점을 방지하는 방법은 무엇입니까?

파일 이름과 다른 확장자가 있다고 가정해 보겠습니다.

test.tex
test.pdf

확장자 없이 파일 이름만 입력한 다음 전체 파일 이름을 입력하는 것이 더 쉽습니다. 이는 해당 프로그램이 필요한 확장을 알고 자동으로 추가하기 때문에 가능합니다. 다음 예제는 완벽하게 작동합니다.

tex test
pdf-viewer test

그러나 여기서 bash 완성을 사용하면 뒤에 점이 추가되어 지속적으로 나를 짜증나게 합니다. 예를 들어:

tex te<TAB>

~이 되다

tex test.

하지만 오류가 발생하여 앱이 작동하지 않습니다. 클릭할 때마다 백스페이스를 눌러야 합니다 <TAB>. :-(

자동 완성 중에 후행 점을 추가하지 않도록 bash에 어떻게 지시합니까?

답변1

더 간단한 방법이 있을 수 있지만 다음과 같이 작동하는 것 같습니다.

texfiles () { names=( "$2"*.tex ); COMPREPLY=( "${names[@]%.tex}" ); }

complete -F texfiles tex

먼저 이라는 쉘 함수를 설정하십시오 texfiles. 두 번째 명령줄 인수( 사용자가 해당 단어에 대해 Complete를 누르기 전에 명령줄에 입력한 단어)를 사용하고 $2일치 하는 모든 이름으로 배열을 채웁니다 .TabCOMPREPLY"$2"*.tex

각 이름에 대해 .tex접미사는 배열에 추가되기 전에 제거됩니다.

그런 다음 이 명령을 사용하여 complete명령 texfiles의 파일 이름 완성 기능을 실행하도록 쉘에 지시합니다.tex구체적으로. 동일한 방식으로 파일을 완성 complete해야 하는 모든 명령에 대해 .tex동일한 명령을 반복 할 수 있습니다 . pdf-viewer해당 함수를 만들고 싶을 수도 있기 때문입니다 pdffiles(이러한 함수의 이름은 임의적입니다).

실제 모습은 다음과 같습니다( 키 <tab>를 눌렀다는 의미 Tab).

bash-4.4$ ls -l
total 0
-rw-r--r--  1 kk  wheel  0 Sep 28 21:43 README.txt
-rw-r--r--  1 kk  wheel  0 Sep 28 21:12 file.tex
-rw-r--r--  1 kk  wheel  0 Sep 28 21:24 file2.tex
-rw-r--r--  1 kk  wheel  0 Sep 28 21:25 hello.tex

bash-4.4$ tex <tab><tab>
file   file2  hello
bash-4.4$ tex

bash-4.4$ tex f<tab>ile<tab><tab>
file   file2
bash-4.4$ tex file

( ilein은 file쉘에 의해 삽입됩니다)

자세한 내용은 매뉴얼의 "프로그래밍 가능한 완성" 섹션을 읽어보세요 bash.

답변2

tex명령 에 대한 사용자 정의 완성 사양을 에 추가합니다 .bashrc. 파일 이름 완성을 사용해야 한다고 지정한 후 tex필터를 추가하여 인수를 제거할 수 있습니다.아니요*.tex가능한 완료와 일치합니다.

complete -f -X '!*.tex'

이제 디렉토리에 test.tex, test.auxtest.pdf접두사가 test있는 경우오직까지 완료 이는 바로가기 생성을 test.tex건너뛰는 대신 필요한 파일의 전체 이름을 완성합니다 ..

관련 정보