Ortam değişkenleri için Bash otomatik tamamlama [kapalı]


25

Bash autocomplete özelliği, 11.04'te ortam değişkenleriyle çalışmıyor gibi görünüyor. Mevcut davranış aşağıda gösterilmiştir

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

komut istemi gerçekleşmeden \önce ters eğik çizgi ( ) eklenmesine neden $SCRIPTolur

cd \$SCRIPT/

Aynı şey cd, lsbaşka bir komutla değiştirilirse de olur.

Ayrıca, $ SCRIPT içinde bulunan yolda çalıştırılabilir bir dosya varsa ve onu çalıştırmak istiyorum.

$SCRIPT/<tab>

Bash, klasör içindeki seçenekleri göstermez (ortam değişkenlerinde bulunan yolun içinde tek bir dosya mı yoksa birden fazla dosya / dizin olup olmadığına bakılmaksızın).

Başka bir deyişle, otomatik tamamlama çevre değişkenleriyle çalışmaz.



Bence bash versiyonuyla (4.1 veya 4.2) bir ilgisi yok. Ben sadece bash-4.1'i kaynaklardan kurdum ve onu 4.2.24 yerine kullandım (Ubuntu 12.04 versiyonu; tamamen aynı. Çok, çok can sıkıcı ...

4
Bu soru konu dışı görünüyor çünkü eski bir desteklenmeyen sürümdeki bir hatayla ilgili. Hata burada açıklanmıştır ve 12.04 ve sonrasında düzeltilmiştir
Warren Hill

1
@WarrenHill Bu konu dışı olabilir, çünkü bir hata ile ilgilidir (ve bu yüzden onu kapatmak için oy verdim). Hatanın desteklenmeyen bir sürümde olması, bununla alakasızdır - etkilenen sürümün EOL tarihi geldiğinde, konu dışı cevapları olan eski soruları kapatmayız. Sadece yeni / cevaplanmamış EoL soruları konu dışı.
Eliah Kagan

Yanıtlar:


13

Bu hata bash 4.2'de tanıtıldı. Burada uzun bir iş parçacığı var:

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

Kısacası, bash'ın geliştiricisi Chet Ramey, bunu nasıl düzelteceğinden emin değil.


4.1'e geri dönmenin bir yolu var mı?
nilchat

1
Bir düzeltme yolunda: Chet eski davranışını geri yüklemek için bir "direxpand" shopt ekledi. Henüz Oneiric'te değil.
Nelson

8
Bu kadar az insanın bundan şikayet etmesi benim için şaşırtıcı. Bash'ın birkaç yıl boyunca çalışma şeklinden büyük bir değişiklik.
Scott C Wilson

11

Eski davranışçıyı geri almak için bu komutu kullanın.

shopt -s direxpand

ya da içine .bashrc

Aynı bash farklı sürümleriyle aynı .bashrc kullanıyorsanız,

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

1
Bu test bash 5.0 ve 5.1 için başarısız olur.
Keith Thompson

8

Http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html adresinde önerilen geçici çözüm şudur:

  1. kullanmak <Tab>için hat diyor sen komuta ortamınız değişkeni st otomatik tamamlamakcd $MYVAR
  2. isabet <Esc>+ <Ctrl>-Eakım komut satırı yani yerine genişletmek için $MYVARdeğeri, yol tarafından
  3. ekleyin /ve ardından <Tab>her zamanki gibi otomatik tamamlamanın keyfini çıkarın

Bu, emacs modunda ( set -o emacs) olduğunuzu ve (örneğin ) bash_completioniçin makul bir şekilde ayarlanmış olduğunu varsayar .cdcomplete -o nospace -F _cd cd

Ne yazık ki bu vi modunda ( set -o vi) çalışmıyor çünkü komut satırı genişletme o zaman kullanılamaz.


2

Shell değişkenini yazdıktan sonra

cd $SCRIPT/

Cntrl-Alt-E yazın. Bu değişken genişletir

cd /home/user/script/

Bu, Fedora 16'da EDITOR = vi ile çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.