Bash 버전 "3.2.51(1)-release"(OS: SUSE Linux Enterprise Server 11.1(x86_64))를 사용하는 원격 컴퓨터에서 변수 이름을 사용하여 일반적인 탭 완성을 수행할 수 없습니다. 예를 들어 다음과 같이 입력하고 싶습니다.
echo $OLDPWD/
그런 다음 슬래시 끝에서 "Tab"을 누르면 변수 이름이 이전 디렉터리 이름(마지막 cd
또는 pushd
명령 앞)으로 확장됩니다. 이것은 내 노트북(Debian 7, Bash 4.2.37(1)-릴리스)에서 작동합니다. 이 SLES bash 쉘에서는 왜 작동하지 않습니까?
마찬가지로, 내가 입력하면
echo $OLDP
그런 다음 "P" 끝에 있는 "Tab"을 누르면 bash가 이를 완료합니다 $OLDPWD
. 이는 SLES 11 bash에서도 발생하지 않습니다.
이 동작에 영향을 미치는 제어 변수(shopt? set?)는 무엇입니까?
답변1
shopt -s direxpand
bash 4.2 echo $HOME/<tab>
로 확장 됩니다 . echo /home/matt/
Bash 4.1에서는 이것이 기본값이어야 합니다.
나는 그것이 bash-completion
정말로 일을 망칠 수 있다는 것을 알았습니다. 저는 항상 개별 완성 규칙이 기본 완성에 어리석은 짓을 하지 않는지 확인하기 위해 제거 bash-completion
하거나 실행합니다 .complete -r
$OLDPWD
실제로 설정된 경우 echo $OLDP<tab>
로 확장되어야 합니다 echo $OLDPWD
. 나는 무엇이 그런 일이 일어나지 않게 할 것인지 모른다.
답변2
가능한 변수(다른 것이 아님) 완성을 명시적으로 요청하는 C-x $
대신 시도해 보세요 .TAB
답변3
에 대한 답변을 확인하세요 urxvt - 탭 확장 환경 변수드미트리 알렉산드로프.
"이것은 direxpand 옵션에 관한 것입니다.
$ shopt -s direxpand 및 $FOO_PATH/
TAB으로 확장됩니다."