bash: 탭 완성으로 변수 이름이 확장되지 않습니다.

bash: 탭 완성으로 변수 이름이 확장되지 않습니다.

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 direxpandbash 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으로 확장됩니다."

관련 정보