2011-04-06 22 views
85

Son zamanlarda kabukta çok fazla zaman harcadım ve sekmenin otomatik tamamlamasının nasıl çalıştığını merak ediyorum. Arkasındaki mekanizma nedir? Bash her dizinin içeriğini nasıl biliyor?Bash sekmesi tamamlanması nasıl çalışır?

+2

'/ etc/bash_completion' kontrol etmek isteyebilirsiniz (en azından sihirin birçoğu Debian'da olduğu yerdir). – Wrikken

+1

@Wrikken: Bu sekme tamamlanmasına bağlı olan bash_completion, ancak tam olarak nasıl değil. –

+2

Ayrıca dahil olmak üzere * nix stackexchange ile ilgili birkaç soru vardır: http://unix.stackexchange.com/questions/4738/an-easy-bash-completion-tutorial http://unix.stackexchange.com/questions/1800/custom-autocomplete http://unix.stackexchange.com/questions/12356/how-does-tab-auto-complete-find-options-to-complete ve SU'daki en az bir tane: http://superuser.com/ sorular/289539/özel bash-tab tamamlama – Cascabel

cevap

81

:

  • taleb kütüphane, zaten fixje tarafından belirtildiği gibi, komut satırı düzenleme yönetir, ve tamamlanabilmesi için sekmeye basıldığında bash'a geri çağrılır. Bash daha sonra olası tamamlamaların bir listesini verir (bir sonraki noktaya bakın) ve readline zaten yazılan karakterlerin belirsiz bir şekilde tanımlandığı kadar çok karakter ekler. (Readline kütüphanesini oldukça fazla yapılandırabilirsiniz, Bash kılavuzunun Command line editing bölümüne bakın. Ayrıntılar.) Ayrı komutlar için bir tamamlama mekanizması tanımlamak üzere Bash'in kendisi, complete numaralı yapıya sahiptir. Mevcut komut için hiçbir şey tanımlanmamışsa, dosya ismine göre tamamlandı (Ignacio'nun dediği gibi opendir/readdir kullanarak).

    Kendi tamamlamalarınızı tanımlayan bölüm, Programmable Completion bölümünde açıklanmıştır. Kısacası, complete «options» «command» ile bir komut için tamamlamayı tanımlarsınız. Örneğin complete -u su, su komutu için bir argümanı tamamlarken diyor, geçerli sistem kullanıcıları için.

    bu Normal seçenekler listesini oluşturmak için daha sonra bir kabuk işlevi çağırmak olacaktır -F function kullanabilirsiniz, (argüman endeksi bağlı olarak veya önceki argümanlar bağlı mesela farklı tamamlamaları) anlatabileceğiniz daha karmaşıktır ise olası tamamlamalar. (Bu alt komutuyla bağlı ve bazen seçenekleri verilen ve bazen hiçbir şey bash) bilir olan dalların adları (kullanarak, çok karmaşık git tamamlanması için örneğin kullanılır.

You Mevcut bash ortamınızda tanımlanan mevcut tamamlamaları, sadece complete kullanarak nelerin mümkün olduğuna dair bir izlenime sahip olarak listeleyebilir.Talh tamamlama paketini yüklediyseniz (veya sisteminizde adlandırılmışsa), çok sayıda komut için tamamlamalar yüklü ve Wrikken'in dediği gibi,/etc/bash_completion, bunu yapılandırmak için çoğunlukla kabuk başlangıcında çalıştırılan bir bash komut dosyası içerir. Ek özel tamamlama komut dosyaları /etc/bash_completion.d dizinine yerleştirilebilir. Hepsi/etc/bash_completion kaynaklıdır.

7

Temel bilgiler: Bash, tarih ve temel tamamlama özelliklerini içeren readline kullanır. Ayrıntılı bir anlayış edinmek istiyorsanız kaynağı inceleyebilirsiniz. Ayrıca, tamamlama ile kendi CLI arabirimleri oluşturmak için readline kullanabilirsiniz

otomatik tamamlanması için iki bölümü vardır