Cập nhật vào năm 2013: Hầu hết các bash-hoàn thành đã được viết lại để tự động hoàn thành tải chỉ khi cần thiết. Kịch bản cốt lõi bây giờ cao hơn nhiều.
Kịch bản hoàn thành đôi khi có thể rất lớn trong các tiêu chuẩn kịch bản shell. Trên một máy chủ mà tôi có quyền truy cập, gần 1700 dòng (57 KB) và đó chỉ là tập lệnh cốt lõi . Trong /etc/bash_completion.d
có ~ thêm 200 kịch bản cho các lệnh khác nhau ( openssl
, mutt
, mount
...) với tổng giá trị 25.537 dòng hoặc 1,2 MB. Mỗi tập lệnh, khi có nguồn gốc, kiểm tra xem một lệnh có thực sự khả dụng hay không trước khi xác định các trình xử lý hoàn thành; ~ 330 lần trong trường hợp này, mỗi lần liên quan đến việc kiểm tra $PATH
tệp thực thi với một tên cụ thể. (Mặc dù tôi dự kiến /usr/bin
sẽ được lưu trong bộ nhớ ...)
Phải thừa nhận rằng, thậm chí đó chỉ mất nửa giây để tải, không phải là hai đầy đủ giây. Nhưng nó có thể là một phần của vấn đề. Chạy du -hs /etc/bash_completion*
hoặc wc -l /etc/bash_completion{,.d/*} | grep total
nếu bạn muốn kiểm tra.
Bạn có thể thử tự tìm nguồn cung cấp tập lệnh, trong chế độ "theo dõi":
set -x
. /etc/bash_completion
Bạn sẽ thấy từng dòng khi nó được thực thi. Nếu có một lệnh cụ thể mất nhiều thời gian, bạn nên chú ý.
( set +x
vô hiệu hóa chế độ theo dõi.)