탭 완료 중에 bash가 $ 이스케이프를 중지하도록 하는 방법은 무엇입니까?

탭 완료 중에 bash가 $ 이스케이프를 중지하도록 하는 방법은 무엇입니까?

명령줄에 다음이 있습니다.

ln -sf $PWD/wine-

그런 다음 Tab파일 이름을 완성하기 위해 키를 쳤습니다. 이전 버전의 Ubuntu에서는 파일 이름을 완성하는 데 문제가 없었습니다 (그리고 당시에 wine-는 부작용이 확장될 수 있었습니다). $PWD하지만 이제 그것은 다음과 같이 변합니다.

ln -sf \$PWD/wine-

이것은 내가 의미하는 바가 전혀 아니며 파일이 문자 그대로 $.

덜 깨진 동작을 다시 완료하려면 어떻게 해야 합니까?

set현재 설정이 다음과 같다고 알려줍니다.

BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor

답변1

나는 그것을 발견했다배쉬 버전 >= 4.2.29새로운 direxpand상점 설정이 있습니다. ( man docs/bash.1새 bash를 확인하거나8951행의 bash.1)

Quantal Quetzal 12.10을 사용하거나 새로운 bash를 확보(또는 체크아웃하고 빌드)하는 경우:

shopt -s direxpand

내가 원하고 필요하고 사랑하는 행동을 나에게 제공합니다.

해결 방법: 그동안 Ctrl++ 대신 내가 원하는 작업도 수행합니다 Alt. 그런데 어색해요.ETab

그런데 "bash 탭 변수 확장 질문"이라는 스레드가 여러 개 있습니다. ~에gnu.bash.bug. 읽으면서 여기에서 정보를 찾았습니다.

답변2

shopt -u progcomp

이로 인해 문제가 해결되었으며, 내가 알고 있는 파일을 완료하지 않음으로써 방해가 되는 많은 "지능형" 완성 옵션도 제거되었습니다. 왜냐하면 어리석은 일이 내가 특정 항목에 대한 인수로 원하지 않는다고 생각하기 때문입니다. 명령. 아아아앙

답변3

_filedir()최상위 bash_completion 스크립트에서 검색 하고 줄을 변경하십시오.

compopt -o filenames 2>/dev/null

에게

compopt -o filenames -o noquote 2>/dev/null

답변4

(나 같은) 12.04를 사용하는 사람들은 $PWD 대신 ~+를 사용할 수 있습니다...

예를 들어 :

cd /bin
echo ~+/ls
/bin/ls

관련 정보