Sekme tamamlama komutlar için çalışmıyor


50

En son güncellemeleri çalıştıran Ubuntu 11.04 Beta 1'deki komutlar için sekme tamamlamayı kullanmaya çalışıyorum, ancak işe yaramadı. (Paket bash tamamlama yüklü olmasına rağmen)

Sekme tamamlama yalnızca dizinler veya dosyalar için doğru şekilde çalışır.

Kazmak için bir fikrin var mı?


Yanıtlar:


67

.Bashrc'nizde aşağıdaki parçanın olup olmadığını kontrol edin (varsayılan olarak orada bulunmalıdır)

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

Teşekkürler! .Bashrc'yi kendim ile değiştirdim ve bu nedenle sorunun ne olduğunu çözemedim. Şimdi mükemmel çalışıyor.
13'te Screatch

Bu, benim git bash otomatik tamamlama xubuntu 12.04 de çok teşekkürler, çok teşekkürler.
palmic

Anahtar değiştirme ve apt-get komutları için otomatik tamamlama seçeneğine ne dersiniz? yani apt-get ins girdiğinizde ve ardından otomatik olarak tamamlamak için sekmeye basın.
Reza Ghodsi

3
Bunun bash-completionçalışması için paketin gerekli olduğunu da eklemek isterim . Tuhaf bir şekilde, şirketimin standart kurulumu bu pakete sahip değil.
Edgar

13

Ayrıca, bash tamamlamadaki başarısızlık için aşağıdaki ek açıklamayı da ekleyeceğimi düşündüm - yorum için çok uzun ve bash tamamlama ile ilgili problemi olan biri için yararlı olabilir, çünkü muhtemelen bu 'genel' kanonik sorudur. tüm kopyalar yönlendirilir.

Eğer uygun bir çizgi var olsa bile senin .bashrcve (yukarıda cevap olduğu gibi) bash-completionya yüklüyse paketi bash tamamlama hala olabilir arıza shopt -s nullglobya shopt -s failglobda In .bashrcveya .bash_aliases.

Aşağıdaki senaryolar , uygun bash tamamlama çizgisi mevcut ve yüklü iken, adil bir test vermek için tüm kullanıcı özelleştirmeleriyle test edildi .bashrcve .bash_aliaseskaldırıldı ..bashrcbash-completion

1) İlk senaryo sizde ya da shopt -s failglobbulunduğunuz zamandır ..bashrc.bash_aliases

Sırasıyla tüm dizinleri ve dosyaları sekmeye çalışırken, bu hatalar ortaya çıkacaktır:

cd Dbash: no match: "${COMP_WORDS[@]}"  
cat pabash: no match: words[0]=${!ref}${COMP_WORDS[i]}

Ancak, komutlar başarılı bir şekilde tamamlanacaktır.

2) shopt -s nullglobEtkinleştirildiğinde, bir dizini veya dosyayı tamamlamak için sekmeyi denemek, tamamlanmış bir şekilde listelenen her şeye yol açar:

cd Do
.adobe/                  .gimp-2.6/               Podcasts/
.aptitude/               .gnome2/                 Public/
.audacity-data/          .gnome2_private/         .pulse/
............

Buradaki listeyi kısalttım, çünkü çok uzun ve hepsini çoğaltmak gerekli değildi.

Yine, komut tamamlama yine de çalışacaktır.

Bu nedenle, sadece kendi içinde ve yüklü uygun bir çizgi olduğunu varsayarak, bash tamamlama ile hata sorununu gidermek shopt -s failglobveya shopt -s nullglobçözmek de olabilir ..bashrcbash-completion


1
Güzel açıklama, sekme tamamlamayı ve hata oluştuğunu denediğimde sorunumu çözdü >> words [0] = $ {! Ref} $ {COMP_WORDS [i]}
bagustris

Bu bir geçici çözüm olarak çalışırken, bir tamamlama programcısının güvenmesi için kötü bir şeydir. Nullglob (çoğu kişi için nominal olarak daha iyidir) ve kin ayarlanabildiğinden, eski semantiği gerektiren herhangi bir tamamlayıcı kod (joker karakterin kendisi ile eşleşmeyen joker karakterler) geçerli glob ayarını kaydetmeli, gerek duyduklarını ayarlamalı ve geri yüklemelidir. daha sonra IFS'nin kullanıldığı gibi eski küre ayarı.
Alex North-Keys

10

/etc/bash.bashrcDosyayı değiştirmenin yanı sıra (diğer cevapları görün) bash-completionpaketi yüklemeniz gerekebilir .

/etc/bash_completionDosya mevcut mu kontrol edin . Eğer hayırsa:

sudo apt-get install bash-completion

(Debian 7 kurulumumda başlangıçta kurulmadı)


7

Kulağa geldiği kadar basit, bash'in aktif kabuğunuz olduğundan emin olun

echo $SHELL

Sadece bile bu yazı konusunda tavsiye izledikten sonra, sadece benim kabuk olarak ayarlandı gerçekleştirmek için, Ubuntu 14.04.1 LTS yükseltilmiş ve hiçbir sekme otomatik tamamlama vardı /bin/shve değil /bin/bash.


2

Ubuntu’ya güncelleme 14.04.01

.Bashrc'nizde aşağıdaki parçanın olup olmadığını kontrol edin (varsayılan olarak orada bulunmalıdır)

sudo vim /etc/bash.bashrc (dosyayı düzenlemek için "i" yazın)

    # enable bash completion in interactive shells
    if ! shopt -oq posix; then
     if [ -f /usr/share/bash-completion/bash_completion ]; then
        . /usr/share/bash-completion/bash_completion
      elif [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
      fi
    fi

Uncomment 7 satır yukarıda

"Esc + w + q + enter" dosyasını kaydedin

Bash'i yeniden başlat

exec bash


1
Bu ne yapacak? Varsayılan olarak bu böyle değil mi?
Tim

@Tim'in dediği gibi, bu yapılandırma varsayılan yapılandırma ile sağlanır.
ssoto

Bu benim için çalıştı
Thamaraiselvam

Bu cevap bir cazibe gibi çalıştı ve olumsuz oyları var ???
greuze
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.