Kötü bir komuttan sonra bash'ın duraklamasına neden olan şey nedir?


23

Kötü bir komut yazarken, yapmak istediğinizi söyleyin:

$ cd ..
$ ls

Fakat bunun yerine çok hızlı yazıyorsunuz ve sonunda l ve s arasına girerek isabet alıyorsunuz.

$ cd ..
$ l
sbash: l: command not found...

Bu, elbette her zaman hızlı yazdığımız zaman olur. Merak ettiğim şey kötü komut metni ekranda göründükten sonra 2.5 saniyenin (sistemimdeki) duraklatmasının kaynağı. Bana göre kötü komutu anında tanıyor, hata mesajını basıyor, ama sonra sadece eğlence için beni komut satırına geri döndürmeden önce 2,5 saniye bekler. Buna ne sebep oluyor? Bunu düzeltmenin bir yolu var mı? Küçük bir sıkıntı ama ondan kurtulmak istiyorum. :)

Düzenleme: Çalışan Fedora 16 sistemi


Hangi işletim sistemi üzerinde bulunduğunu söylemeyi unuttun.
Daniel Beck

Whoa, sen l'le değil mi? :)
dotjoe

Yanıtlar:


42

Bu davranışa, bash'a bağlanan bazı dağıtımlara sıkça yüklenen bir araç neden olur. Bu kanca, bir komutu çalıştırmayı denerseniz ve komut mevcut olmadığında, bash yapılandırılmış depolarda bulunan dosyaları arayacak ve bu komutu almak için hangi paketi kurmanız gerektiğini söyleyecektir.

Eğer bir Debian sisteminde değilseniz, bash başlangıç ​​dosya profillerine ve benzerlerine bakmak ve adlandırılmış işlevi tanımlayan herhangi bir şey olup olmadığını görmek istersiniz command_not_found_handle. Bu bash işlevi tanımlanmışsa, bir komut çalıştırdığınızda çağrılır ve uygun bir program arama yolunda bulunamaz. Çalıştırıp typset | lessçıktılara göz atarsanız, command_not_found_handle()tanımlanmışsa işlevi görürsünüz .

Debian / Ubuntu'da bu davranışı sağlayan paket komut bulunamadı . Bunu temizlerseniz, işleri yavaşlatan aramaları devre dışı bırakacaksınız.

İşte bir örnek

# command-not-found installed
$ time pwgen
The program 'pwgen' is currently not installed.  To run 'pwgen' please ask your administrator to install the package 'pwgen'
pwgen: command not found

real    0m0.074s
user    0m0.032s
sys     0m0.040s

# purge command-not-found and restart bash
$ time pwgen
-bash: pwgen: command not found

real    0m0.002s
user    0m0.000s
sys     0m0.000s

Tam zamanı elbette sizin için farklı olurdu. Testlerimi oldukça etli bir sunucuda yaptım.


10
Fedora davamda, şu adında bir paket olduğu ortaya çıktı: PackageKit-command-not-found
Fuu

6

Sorunun bir kısmı "bunu düzeltmenin bir yolu var mı (Fedora'da)?" Var: .bashrc dosyanızın altına komutu ekleyin

unset command_not_found_handle

Muhtemelen .bashrc'ınızın sonunda (veya buna yakın) yapmak isteyeceksinizdir, çünkü .bashrc'in üstünde / etc / bashrc veya diğer bash scriptleri kullanıyor olabilirsiniz.


5

Fedorada, bu davranış /etc/PackageKit/CommandNotFound.confyapılandırma dosyası değiştirilerek kontrol edilebilir .

SoftwareSourceSearch=falsePaket yöneticisini kullanarak eksik komutu olan bir paket bulmaya çalışmadığından ayar gecikmeden kurtulur.

Ayrıca MaxSearchTime=2000, paket aramasının bir eşleşme döndürmesini beklemek istediğiniz milisaniyenin sayısını belirleme seçeneğini değiştirerek, paket araması için bekleyeceği süreyi de değiştirebilirsiniz . 2 saniyenin varsayılanının, eşleşmeleri döndürecek kadar uzun olmadığını ve yazım hatası olduğunda sadece istenmeyen bir gecikmeye neden olduğunu buluyorum.

MaxSearchTimeYararlı çıktılar elde etmek için ya çarpın ya SoftwareSourceSearchda gecikmeyi tamamen ortadan kaldırmak için devre dışı bırakın.

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.