Yavaş yavaş otomatik tamamlama hata ayıklama ve düzeltmek için nasıl?


26

Son güncellemeden sonra (Ubuntu 12.04 LTS), komut satırında TAB tamamlandı yavaştır. Kısmi bir komut (örn. evi [TAB]) Veya kısmi dosya adı (örn. evince somedocu[TAB]) Girdikten sonra , kabuk, bazen her zaman olmasa da, birkaç saniye beklenir.

Şahsen, yavaş olana göre daha az güçlü bir otomatik tamamlamayı tercih ederim. Basit bir düzeltme var mı?

Düzenleme: Yorumlarla ilgili ek bilgiler:

  • PATH oldukça standart. ~ / bin bazı bash betiğine sahiptir

    $ echo $PATH
    /home/USERNAME/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
    
  • Çalışma dizindeki dosya sayısı 100'den az.

  • Otomatik tamamlama özelliği, olağandışı disk etkinliğinden sonra (sistem yükseltme) özellikle yavaştı. Dolayısıyla yeniden okumak / usr / bin ve diğer dizinlerin gecikmeye neden olması mümkündür.

4
Güncelleme ile sabit sürücü hız yönetiminizi etkinleştirmeniz ve otomatik tamamlamanın, otomatik tamamlamayı hesaplayabilmek için diskin uyanmasını beklemesi değil mi?
Vincent Nivoliers

2
Geçerli dizininizde kaç dosya olduğuna bağlı mı?
terdon

1
# Echo $ PATH ne diyor? Yolunuzdaki dizinlerde çok sayıda (on binlerce veya daha fazla) dosya varsa, buna neden olabilir.
Stephan

Yanıtlar:


28

Sabitleme hakkında bilmiyorum - gecikmeye neden olabilecek her türlü şey var. Ancak araştırmak için birkaç ipucu sunabilirim.

Tahmin edilebileceği gibi, belki de bir arama yolunda ( $PATHya da bash'ın tamamlama verilerini aradığı bir yer) bir dizinde yanıt vermesi yavaş olan bir dosya sistemi var. Genelde yavaş olan uzak dosya sistemleridir, ancak arızalı bir sabit disk, askıya alınmış bir FUSE sürücüsü vb. De olabilir.

Araştırılacak ilk adım set -x, kabuğun tamamlamaları oluşturmak için yürüttüğü komutları takip etmek için çalışmaktır . Durakladığı yeri izleyin.

Bu yeterli bilgi vermezse, büyük silahları getir. Kabuğun işlem kimliğine ( echo $$) dikkat edin. Başka bir terminalde, koşun strace -f -s9999 -p$$(veya başka bir unix tadı üzerinde çalışıyorsa strace eşdeğeri ). Strace, işlem tarafından gerçekleştirilen sistem çağrılarını listeler. Olmaması gereken dosyalara erişiyor gibi görünüp görünmediğini veya bazı dosyalara erişimin yavaş olup olmadığını görün. Seçeneği ekleme -Tiçin stracekomut satırında her sistem çağrısı harcanan zamanı göstermek yapar.


1
Unix kullandığım ve bilmediğim zaman set -x, ne güzel bir komut. Çok "bilgisayar korsanı modu"
Matt Fletcher

6
Ps, set +xnormal hata ayıklama moduna geri dönmek için kullanın
Matt Fletcher

19

* Nix kutunuz bir LDAP istemcisi olarak ayarlandıysa, yerel bir kullanıcı olarak giriş yapmış olsanız bile, bu sorunla karşılaşabilirsiniz.

Sıkıcı hata ayıklama bilgisi: ile hata ayıklama set-x, asılı olduğu bitimini buldum:

> set -x
> ls foo<tab>
...                     <--- lots of output removed
...
+ _quote_readline_by_ref foo quoted
+ '[' -z foo ']'
+ [[ foo == \'* ]]      <--- froze here
+ [[ foo == ~* ]]       <--- actually causing the trouble

Onayla: Bunu ls ~*da asılanla doğruladım . Görünüşe göre ldap sunucum halsizdi, ama bu bash tamamlama ve ls gibi şeyleri etkilememeli!

Çözüm: Aha, bash tamamlama + ldap'a karşı bir hata var, daha yeni bir sürümde düzeltilecek ve beklemek istemiyorsanız basit bir düzeltme eki olacak. Sekme tamamlama yine hızlı, yaşasın!

İşte bağlantının kopması durumunda yama dosyası. Sadece 545 ve 547 numaralı hatlardan kaçıyor:

--- /usr/share/bash-completion/bash_completion.orig 2014-11-06 10:36:14.981888369 +0100
+++ /usr/share/bash-completion/bash_completion  2014-11-06 10:36:25.142070963 +0100
@@ -542,9 +542,9 @@
     elif [[ $1 == \'* ]]; then
         # Leave out first character
         printf -v $2 %s "${1:1}"
-    elif [[ $1 == ~* ]]; then
+    elif [[ $1 == \~* ]]; then
         # avoid escaping first ~
-        printf -v $2 ~%q "${1:1}"
+        printf -v $2 \~%q "${1:1}"
     else
         printf -v $2 %q "$1"
     fi

Bu yamanın etkinleşmesi için geçerli ssh oturumundan çıkmanız ve tekrar oturum açmanız gerekir.


1
Bu kesin sorunu yaşadım ve yama iyi
radman

2
Burada da aynı sorun (Debian 8.5) 2 1/3 yıl önce ve çözüm cazibeye benziyor. Debian 8.6'da sorun yok.
YoMismo

2
Set -xa milyon kere kullandım ama tamamlanma performansı sorunları da göstermesini beklemiyordum , çok teşekkürler!
MarcH

Debian 9.8 ile bu problemi yaşadım!
Philippe Gachoud

0

Bash tamamlamayı yeniden yüklemeyi deneyin

sudo apt-get install --reinstall bash-completion

Benim için bu Ubuntu 18.04.3 LTS'de düzeltildi.


0

Ayrıca bazı insanlar Git bash auto complete gibi ekstra otomatik tamamlama özelliklerini kullanır . Bash tamamlama yavaşlığı, bu ekstra otomatik tamamlama özelliklerinin yanlış çalışmasının bir sonucu olabilir.

Benim durumumda Git bash auto complete oldu git git ortak anahtarım güncellendi, bu yüzden bir kilitlenmeye neden olan başarısız bir kimlik doğrulama girişimi yapıyordu. Otomatik tamamlamayı kaldırdıktan sonra tekrar hızlı oldu. Böylece benim çözümüm anahtarımı düzeltip tekrar etkinleştirmek oldu.

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.