Apa yang menyebabkan bash berhenti setelah perintah yang buruk?

23

Saat Anda mengetik perintah yang salah, katakan ingin Anda lakukan:

$ cd ..
$ ls

Tetapi Anda mengetik terlalu cepat dan akhirnya menekan masuk antara l dan s, sehingga Anda mendapatkan:

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

Ini terjadi sepanjang waktu tentu saja, ketika kita mengetik cepat. Yang membuat saya penasaran adalah sumber dari jeda 2,5 detik (di sistem saya) setelah teks perintah buruk muncul di layar. Menurut saya itu langsung mengenali perintah yang salah, mencetak pesan kesalahan tentangnya, tapi kemudian hanya bersenang-senang menunggu 2,5 detik sebelum mengembalikan saya ke baris perintah. Apa yang menyebabkan ini? Apakah ada cara untuk memperbaiki ini? Ini gangguan kecil, tapi saya ingin menyingkirkannya. :)

Sunting: Menjalankan sistem Fedora 16

Fuu
sumber
Anda lupa menyebutkan OS yang Anda gunakan.
Daniel Beck
whoa, kamu tidak alias l to ls? :)
dotjoe

Jawaban:

42

Jenis perilaku ini disebabkan oleh alat yang sering dipasang pada beberapa distribusi yang terhubung ke bash. Hook ini membuatnya sehingga jika Anda mencoba menjalankan perintah, dan perintah itu tidak ada, maka bash akan mencari file yang tersedia di repositori yang dikonfigurasi, dan memberi tahu Anda paket apa yang perlu Anda instal untuk mendapatkan perintah itu.

Jika Anda tidak menggunakan sistem Debian, Anda ingin melihat profil file startup bash Anda dan seterusnya dan melihat apakah ada yang mendefinisikan fungsi yang dinamai command_not_found_handle. Jika fungsi bash didefinisikan, maka itu akan dipanggil setiap kali Anda menjalankan perintah dan program yang sesuai tidak dapat ditemukan di jalur pencarian Anda. Jika Anda menjalankan typset | lessdan menelusuri keluaran, Anda akan melihat command_not_found_handle()fungsinya jika telah ditentukan.

Pada Debian / Ubuntu paket yang menyediakan perilaku ini tidak ditemukan perintah . Jika Anda membersihkannya, maka Anda akan menonaktifkan pencarian yang memperlambat segalanya.

Berikut ini sebuah contoh

# 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

Waktu yang tepat tentu saja akan berbeda untuk Anda. Saya menjalankan tes saya di server yang cukup gemuk.

Sakit kepala
sumber
10
Dalam kasus saya di fedora, itu ternyata paket yang disebut: PackageKit-command-not-found
Fuu
6

Bagian dari pertanyaannya adalah "apakah ada cara untuk memperbaikinya (di Fedora)?" Ada: di bagian bawah file .bashrc Anda, tambahkan perintah

unset command_not_found_handle

Anda mungkin ingin melakukannya di akhir .bashrc Anda (atau dekat dengannya) karena Anda mungkin menjalankan /etc/bashrc atau skrip bash lainnya di bagian atas .bashrc Anda.

Scott C Wilson
sumber
5

Pada fedora, perilaku ini dapat dikontrol dengan mengubah /etc/PackageKit/CommandNotFound.conffile konfigurasi.

Pengaturan SoftwareSourceSearch=falseakan menghilangkan penundaan karena tidak akan mencoba menemukan paket dengan perintah yang hilang menggunakan manajer paket.

Anda juga dapat mengubah jumlah waktu yang dibutuhkan untuk menunggu pencarian paket dengan mengubah MaxSearchTime=2000opsi untuk menunjukkan jumlah milidetik yang Anda inginkan untuk menunggu pencarian paket untuk mengembalikan kecocokan. Saya menemukan bahwa default 2 detik tidak cukup lama untuk mengembalikan kecocokan dan hanya menyebabkan penundaan yang tidak diinginkan ketika Anda salah ketik.

Entah MaxSearchTimeuntuk memberikan hasil yang bermanfaat atau menonaktifkan SoftwareSourceSearchuntuk menghilangkan penundaan sama sekali.

Aner
sumber