Bash에서 탭 자동 완성을 대소 문자를 구분하지 않게 만들 수 있습니까?


144

우분투 터미널은 Linux에서 예상되는 것처럼 대소 문자를 구분하는 자동 완성을 사용합니다.

그러나 대소 문자를 구분하지 않고 이름을 시작하는 동안 정확성을 유지하는 것이 더 편리하고 추가 오 탐지 가치가 있다고 생각합니다. 이 행동을 바꿀 수 있습니까?


아주 좋은 질문입니다. 유용성 도구로서, 탭 완성은 일반적으로 컴퓨터 시스템만큼 엄격하지 않아야합니다.
— masterxilo

답변:


169

수 있도록하기 위해 bash현재 사용자에 대한 대소 문자를 구별하지 :

터미널에서 다음 쉘 스크립트를 실행하십시오.

# If ~/.inputrc doesn't exist yet: First include the original /etc/inputrc
# so it won't get overriden
if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi

# Add shell-option to ~/.inputrc to enable case-insensitive tab completion
echo 'set completion-ignore-case On' >> ~/.inputrc

새 쉘을 시작하십시오 (터미널을 다시여십시오).

시스템 전체를 변경하려면 다음을 수행하십시오.

# add option to /etc/inputrc to enable case-insensitive tab completion for all users
echo 'set completion-ignore-case On' >> /etc/inputrc
# you may have to use this instead if you are not a superuser:
echo 'set completion-ignore-case On' | sudo tee -a /etc/inputrc

자세한 내용은를 참조하십시오 man bash. 예, 긴 페이지이지만 bash는 다소 복잡한 프로그램이므로 "대소 문자를 구분하지 않는"페이지를 검색하여 관련 섹션으로 이동하십시오. 사람들은 일반적으로 한 번에 하나의 옵션 또는 한 번에 하나의 bash 스크립트를 배우고 모든 뉘앙스를 마스터하는 데 시간이 오래 걸립니다. 관심 분야가 다를 수 있습니다.


감사. 사용자 별 / 비관 리용 솔루션에 감사드립니다. 에코 라인이 작동 한 것 같지만 이제는 Ctrl- 왼쪽 / 오른쪽을 사용하여 커서를 이동하는 기능을 잃어버린 것 같습니다. 또한 >>보다 안전 >합니까?
— mwfearnley

일반적으로 >>는 더 안전합니다. 제 실수는 ~ / .inputrc가 없다고 가정합니다. 또한 noclobber =)를 설정했습니다. 화살표 키가 작동하지 않는 이유를 확신하십시오. 복제 할 수 없습니다. ~ / .inputrc를 제거하고 새 쉘을 시작할 수 있습니다.
— Panther

예, 제거하면 다시 작동합니다. linuxfromscratch.org/blfs/view/5.1/postlfs/inputrc.html 에 따르면 새로운 inputrc가 전역 입력을 재정의하고 있습니까?
— mwfearnley

2
젠장, 나는 이것을 / etc / inputrc에 복사하고 더 이상 "i"를 입력 할 수 없으며 "e"를 입력하면 "ssssssssss [..]"를 콘솔에 스팸으로 보냅니다. @ emtin4의 솔루션을 더 잘 사용하십시오
— Luca Steeb 23.49에

2
@LucaSteeb 나도 그것을 맞았지만이 전체 블록이 .inputrc에 넣지 말고 한 번 입력해야한다는 것을 깨달았습니다. 단지 $include /etc/inputrc와 set completion-ignore-case on당신 ~ ..inputrc 파일에 있어야합니다.
— Chris

49

터미널을 열고 아래 명령을 입력하십시오 :

echo set completion-ignore-case on | sudo tee -a /etc/inputrc

암호를 입력. 터미널을 다시 시작하십시오.

경우에 따라 대소 문자를 구분하지 않으려면 행을 제거하여 / etc / inputrc 파일을 편집하십시오 set completion-ignore-case.

그게 다야.


좋아, 나는 당신을 위해 그것을 명확히했다. 배쉬에 대해 배우는 데 시간이 걸리지 만 계속 탐색하고 읽고 읽습니다. linuxcommand.org 는 인기있는 시작이다;)
— Panther

3
경우에는이 모든 것이 변경, 둘 이상의 사용자가있는 수도 있고 원하는 동작하지 않을 수 있습니다
— 월터 Tross

2
지금까지 가장 간단하고 간단한 답변
— workabyte

간단하고 명확한 답변
— Developerium

12

나는이 질문이 매우 오래되었다는 것을 알고 있지만 뭔가 빠지지 않으면 bash를 사용하는 경우 매우 간단한 해결책이 있다고 생각합니다.

echo "bind 'set completion-ignore-case on'" >> ~/.bashrc

또는 원하는 텍스트 편집기를 사용하여 줄을 추가하십시오. bash 세션을 다시 시작하고 즐기십시오.


2
글쎄, 당신은 무언가를 놓치고있다 : ~/.inputrcreadline으로 읽힌다. 이것은 bash 가이 완성을 제공하기 위해 사용하는 것이다. 작성한 Readline 또한, 일반적으로이 설정을위한 다른 프로그램에서 사용하므로되는 ~/.inputrc제안 허용 대답이 더 좋을 것이다.
— muru

귀하의 제안에 감사드립니다. 조금 더 가르쳐 주지만 새 파일이 이전 파일을 무효화하지 않도록 추가 줄을 사용하는 것보다 더 간단하게 보이지는 않습니다.
— mwfearnley

완전한. 잘 기억 bind 'set completion-ignore-case on'해야 할 것은.bashrc
— Vishrant

3

대화 형 쉘에서 입력을 처리하는 GNU readline에 대한 구성 변수를 설정하여이를 수행 할 수 있습니다.

필요한 변수는 completion-ignore-case이며 다음을 사용하여 bash 세션에서 직접 설정할 수 있습니다.

bind "set completion-ignore-case on"

모든 사용자가 사용할 수 있도록 사용자 ~/.inputrc파일 또는 시스템 에 넣어 향후 모든 bash 세션에 대해 활성화 할 수 있습니다 /etc/inputrc. 이것은 readline의 초기화 파일입니다.

그러나 당신이 만드는 경우주의 ~/.inputrc,이됩니다 시스템 복사를 오버라이드 (override) . (나를 위해 Ctrl-Left/ 와 같은 일부 키 매핑이 손실되었습니다 Right. /etc/inputrc파일을 살펴보면 어느 것을 볼 수 있습니다 .)
이 문제를 해결하는 방법은 다음과 같이 줄 $include /etc/inputrc을 맨 위에 두는 것입니다 ~/.inputrc.

$include /etc/inputrc

set completion-ignore-case on

변경 사항을 적용하려면 bash를 다시 시작하거나 inputrc를 다시로드하십시오 ( 예 : Ctrl+x,) Ctrl+r.

작성한 Readline와 INPUTRC에 대한 자세한 내용은에서 찾을 수 있습니다 man bash와 man 3 readline.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.