환경 변수에 대한 Bash 자동 완성 [닫힘]


25

bash 자동 완성 기능은 11.04의 환경 변수에서 작동하지 않는 것 같습니다. 현재 행동은 아래에 표시됩니다

export SCRIPT=/home/user/script
cd $SCRIPT/<tab>

프롬프트가 \되기 전에 백 슬래시 ( )가 추가 $SCRIPT됩니다.

cd \$SCRIPT/

다른 명령으로 cd대체 ls되거나 다른 명령으로 동일한 경우

또한 $ SCRIPT에 포함 된 경로에 실행 파일이 있고 그 파일을 실행하려면

$SCRIPT/<tab>

Bash는 환경 변수에 포함 된 경로 내에 단일 파일 또는 여러 파일 / 디렉토리가 있는지 여부에 관계없이 폴더 내부의 옵션을 표시하지 않습니다.

즉, 자동 완성은 환경 변수와 함께 작동하지 않습니다.


2
런치 패드버그는 다음과 같습니다 .
idbrii

bash 버전 (4.1 또는 4.2)과 관련이 없다고 생각합니다. 방금 소스에서 bash-4.1을 설치하고 4.2.24 (Ubuntu 12.04 버전; 소스에서 설치되었으므로 각 sys 업그레이드시 패키지를 '지체'할 필요가 없음) 대신 사용했습니다. 정확히 동일합니다. 매우, 매우 성가신 ...

4
이 질문은 지원되지 않는 이전 릴리스의 버그에 관한 것이므로 주제에 맞지 않는 것 같습니다. 버그는 여기 에 설명 되어 있으며 12.04 이상에서 수정되었습니다
Warren Hill

1
@WarrenHill 이것은 버그에 관한 것이기 때문에 주제에 맞지 않을 수 있습니다. 버그가 지원되지 않는 릴리스에 있다는 것은 관련이 없습니다 . 영향을받는 릴리스의 EoL 날짜가 올 때 주제가 맞지 않는 오래된 질문 닫지 않습니다 . 새로운 / 답변되지 않은 EoL 질문 만 주제를 벗어납니다.
Eliah Kagan

답변:


13

이 버그는 bash 4.2에서 소개되었습니다. 여기에 긴 스레드가 있습니다.

http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html

간단히 말해 bash 개발자 인 Chet Ramey는 아직 문제를 해결하는 방법을 모릅니다.


bash 4.1로 되돌릴 수있는 방법이 있습니까?
nilchat

1
Chet은 "direxpand"shopt을 추가하여 이전 동작을 복원했습니다. 아직 Oneiric에 없습니다.
Nelson

8
소수의 사람들이 이것에 대해 불평 한 것은 놀랍습니다. bash가 몇 년 동안 일한 방식과는 큰 변화입니다.
Scott C Wilson 1

11

이전 행동을 되돌리려면 다음 명령을 사용하십시오.

shopt -s direxpand

또는 당신의 그것을 포함 .bashrc

다른 버전의 bash와 동일한 .bashrc를 사용하는 경우

if ((BASH_VERSINFO[0] >= 4)) && ((BASH_VERSINFO[1] >= 2))
    then shopt -s direxpand
fi

1
이 테스트는 bash 5.0 및 5.1에서 실패합니다.
Keith Thompson

8

http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html 에서 제안 된 해결 방법 은 다음과 같습니다.

  1. <Tab>환경 변수를 자동 완성 하는 데 사용 하십시오.cd $MYVAR
  2. 현재 명령 행을 확장하려면 <Esc>+ <Ctrl>-E를 누르십시오. 즉 $MYVAR값을 경로로 대체 하십시오.
  3. 추가하고 평소와 같이 자동 완성 /을 즐기십시오<Tab>

이것은 당신이 emacs 모드 ( set -o emacs)에 있고 (예 bash_completion:)를 적절하게 설정 했다고 가정합니다 .cdcomplete -o nospace -F _cd cd

불행히도 set -o vi명령 줄 확장을 사용할 수 없기 때문에 vi 모드 ( ) 에서는 작동하지 않습니다 .


2

쉘 변수를 입력 한 후

cd $SCRIPT/

Cntrl-Alt-E 유형. 이것은 변수를 확장

cd /home/user/script/

이것은 Fedora 16에서 EDITOR = vi와 함께 작동합니다.

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