Điều gì khiến bash tạm dừng sau một lệnh xấu?


23

Khi bạn đang gõ một lệnh xấu, hãy nói rằng bạn muốn làm:

$ cd ..
$ ls

Nhưng thay vào đó, bạn gõ quá nhanh và cuối cùng nhấn enter giữa l và s, vì vậy bạn nhận được:

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

Điều này xảy ra tất cả thời gian, khi chúng ta gõ nhanh. Điều tôi tò mò là nguồn tạm dừng 2,5 giây (trên hệ thống của tôi) sau khi văn bản lệnh xấu xuất hiện trên màn hình. Dường như với tôi, nó nhận ra lệnh xấu ngay lập tức, in thông báo lỗi về nó, nhưng sau đó chỉ để chờ 2,5 giây trước khi đưa tôi trở lại dòng lệnh. Điều gì gây ra điều này? Có cách nào khắc phục điều này? Đó là một phiền toái nhỏ, nhưng tôi muốn thoát khỏi nó. :)

Chỉnh sửa: Chạy hệ thống Fedora 16


Bạn đã quên đề cập đến những gì hệ điều hành bạn đang trên.
Daniel Beck

Whoa, bạn không bí danh l đến ls? :)
dotjoe

Câu trả lời:


42

Loại hành vi này được gây ra bởi một công cụ thường xuyên được cài đặt trên một số bản phân phối móc vào bash. Móc này làm cho nó để nếu bạn cố chạy một lệnh và lệnh không tồn tại, thì bash sẽ tìm kiếm các tệp có sẵn trong kho được cấu hình và cho bạn biết gói nào bạn cần cài đặt để nhận lệnh đó.

Nếu bạn không ở trong hệ thống Debian, bạn sẽ muốn xem xét các hồ sơ tệp khởi động bash của mình, v.v. và xem liệu có gì xác định chức năng được đặt tên không command_not_found_handle. Nếu hàm bash đó được xác định, thì nó sẽ được gọi bất cứ khi nào bạn chạy lệnh và một chương trình thích hợp không thể tìm thấy trong đường dẫn tìm kiếm của bạn. Nếu bạn chạy typset | lessvà duyệt qua đầu ra, bạn sẽ thấy command_not_found_handle()chức năng nếu nó đã được xác định.

Trên Debian / Ubuntu gói cung cấp hành vi này là không tìm thấy lệnh . Nếu bạn thanh lọc điều đó, thì bạn sẽ vô hiệu hóa các tra cứu làm chậm mọi thứ.

Đây là một ví dụ

# 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

Thời gian chính xác tất nhiên sẽ khác nhau đối với bạn. Tôi đã chạy thử nghiệm của tôi trên một máy chủ khá khó khăn.


10
Trong trường hợp của tôi ở fedora, hóa ra đó là một gói có tên: GóiKit-lệnh-không tìm thấy
Fuu

6

Một phần của câu hỏi là "có cách nào để khắc phục điều này (trong Fedora) không?" Có: ở cuối tệp .bashrc của bạn thêm lệnh

unset command_not_found_handle

Bạn có thể muốn làm điều đó ở cuối .bashrc (hoặc gần với nó) bởi vì bạn có thể đang chạy / etc / bashrc hoặc các tập lệnh bash khác ở đầu .bashrc của bạn.


5

Trên fedora, hành vi này có thể được kiểm soát bằng cách thay đổi /etc/PackageKit/CommandNotFound.conftệp cấu hình.

Cài đặt SoftwareSourceSearch=falsesẽ thoát khỏi độ trễ do nó sẽ không cố gắng xác định vị trí gói với lệnh bị thiếu bằng trình quản lý gói.

Bạn cũng có thể thay đổi lượng thời gian sẽ chờ cho tìm kiếm gói thay vì thay đổi MaxSearchTime=2000tùy chọn để chỉ ra số mili giây bạn sẵn sàng chờ đợi tìm kiếm gói trả về kết quả khớp. Tôi thấy rằng mặc định là 2 giây không đủ dài để trả về bất kỳ trận đấu nào và chỉ gây ra độ trễ không mong muốn khi bạn mắc lỗi đánh máy.

Hoặc tăng cường MaxSearchTimeđể cung cấp đầu ra hữu ích hoặc vô hiệu hóa SoftwareSourceSearchđể loại bỏ hoàn toàn độ trễ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.