디렉토리 이름을 보유한 환경 변수에 대한 Bash 자동 완성


10

Linux Mint 14에서 bash 4.2.37을 사용하고 있습니다.

을 입력하여 환경 변수 이름을 자동 완성하면 변수 Tab이름과 공백으로 확장됩니다.

변수의 값이 디렉토리 이름이면 변수 이름으로 확장하고 그 다음에 /.

예를 들어, 내가 입력하면 :

$ ls $HOM<tab>

그것은 다음과 같이 확장됩니다.

$ ls $HOME _

여기서 _커서의 위치를 ​​표시합니다. 문제는 그때 보통 내가 입력 할 필요가 의미 내 홈 디렉토리에서 일부 파일이나 디렉토리의 이름을 계속 입력 할 것입니다 backspace다음과 /.

나는 그래서 원하는 위가 확장 :

$ ls $HOME/_

전체 변수 이름을 입력했을 때도 마찬가지입니다. 이후 ls $HOMEtab공백을 추가하고을 추가하고 싶습니다 /.

(물론 /변수 값이 디렉토리 이름이 아닌 경우 변수 를 추가하고 싶지 않습니다.)

bash 명령을 통해 또는 내 업데이트를 통해 bash가 원하는 방식으로 작동하도록 지시 할 수있는 방법이 $HOME/.inputrc있습니까?

참고 : 나는 tab내가 원하는 방식으로 행동 하는 방법을 구체적으로 찾고 있습니다. 다른 키 입력으로 동일한 동작을 수행하는 방법은 흥미로울 수 있지만 내 질문에 대답하지는 않습니다.

( /etc/profile.d/bash_completion.sh와의 상호 작용이 원활하지 않아 시스템에서 사용 중지 했습니다 set -o nounset. 빠른 실험에 따르면 이것이 내 질문과 관련이없는 것으로 나타납니다.)

또한 tcsh는 이것을 수행합니다. 환경 변수가 주어지면 디렉토리가 디렉토리를 참조하면 $FOOBAR입력이 $FOOBA<tab>확장됩니다 (공백 포함). 아니요, tcsh로 돌아가도록 설득하기에는 충분하지 않습니다. zsh도이 작업을 수행합니다.$FOOBAR/$FOOBAR


+1 모험심이 느껴지는 경우 코드는 다음과 같습니다 .
l0b0

@ l0b0 : (a) 이미 가지고 있습니다. (나) 나는 아주 기분이 아니에요 모험. (c) 프로그래밍 가능한 완성 이라고 가정합니다 .
Keith Thompson

답변:


6

이 기능은 2014-02-26에 릴리스 된 bash 4.3에서 구현됩니다.

NEWS파일 인용 (의 최상위 레벨에 포함 bash-4.3.tar.gz, GPG 서명 참조 ) :

단어 완성 코드는 쉘 변수를 포함하는 파일 이름이 디렉토리 이름으로 확장되고 /단어에 적절하게 추가되는지 여부를 확인합니다 . 동일한 코드는 명령 완료를 수행 할 때 명령 이름의 쉘 변수를 확장합니다.

소스로 작성된 사본을 사용한 빠른 실험은 내가 입력하면

$ ls $HOM<tab>

이제 확장

$ ls $HOME/

(실수로 zsh도이 작업을 수행합니다.)


1
이를 위해 bash를 수동으로 설치해야했습니다. 4.3은 페도라 20 저장소에 없습니다.
jozxyqk

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