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/inputrcset 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 bashman 3 readline.

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