쉘 변수에 대해 탭 확장/자동 완성을 사용하기 위해 cd를 사용할 수 없는 이유는 무엇입니까?

쉘 변수에 대해 탭 확장/자동 완성을 사용하기 위해 cd를 사용할 수 없는 이유는 무엇입니까?

다음 위치에 변수가 설정되어 있습니다 .bashrc.

export SOME_DIR=/path/to/some/dir

이제 ls입력을 하면 ls $SOME_DIR[tab]변수가 확장되고 파일 시스템을 파고들 때 탭 자동 완성을 사용할 수 있습니다. 그러나 시도하면 cd $SOME_DIR[tab]아무 cd $SOME_DIR/[tab]일도 일어나지 않습니다.

왜 이것이 에만 적용됩니까 ls? 와 함께 작동시키는 것이 가능합니까 cd? 에
추가하려고 시도했지만 효과가 없습니다.shopt -s direxpand.bashrc

답변1

분명히 shopt -s direxpand그것은 내장을 제외하고 작동합니다 cd. 그래서 방금 내 프로필에 추가했고 TAB을 사용하는 것과 같은 방식 alias xy=cd으로 작동합니다 xy. (누가 이렇게 간단할 줄 알았겠어요?)cddirexpand

답변2

Cygwin에서는 쉘 변수를 따옴표로 묶어야 하는 동일한 문제가 있었습니다. 예를 들어 cd $ccc 확장되지는 않지만 cd "$ccc"확장되고 커서는 여전히 올바른 인용 앞에 있습니다.

답변3

디렉토리가 없을 수도 있나요 /path/to/some/dir/? 방금 cd $SOME_DIR/[tab]시스템을 시험해 보았는데 작동합니다.

답변4

(이전) bash 4.2.37에서는 거의 동일한 문제가 있었지만 bash 4.3 또는 4.4에서는 그렇지 않았습니다.
즉, 확장 프로그램은 작동 ls하지만 에서는 작동하지 않습니다 cd.


그러나 보조 키 바인딩으로 다음을 정의했습니다(e에서에스팬):

Ctrl- s~/.inputrc:

Control-s: shell-expand-line

이렇게 하면 다음을 입력할 수 있습니다. cd $SOME_DIR그런 다음 변수를 다음으로 확장합니다 Ctrl.s

cd /path/to/some/dir

똑같이 유용한 키 바인딩은 다음과 같습니다.G드롭 볼):

Ctrl- g내 것도 ~/.inputrc:

Control-g: glob-expand-word

이를 통해 입력한 ls b*다음 확장할 Ctrl수 있습니다 .gb*

$ ls b*<kbd>Ctrl</kbd>-<kbd>s</kbd>
$ ls bash.html_node.tar.gz bash.pdf

또한 이를 통해 명령줄을 편집하고 필요에 따라 요소를 추가하거나 제거할 수 있습니다.

관련 정보