Điều đáng buồn trong câu trả lời của tôi là: bash (thông qua đường dẫn) có rất nhiều khả năng để hoàn thành. Nhưng một bản phân phối Linux bình thường có thể làm phiền việc mở rộng tên tệp cơ bản bằng [tab] (hoặc [tab] [tab]) bằng cách thêm mở rộng tùy chọn . Trong trường hợp của tôi, đó là gói "bash-hoàn thành" cung cấp cho tôi hành vi được mô tả trong bản gốc Q.
Nó không chỉ là một openvpn
vấn đề. Q nói: "ví dụ".
Với bind -p | grep complete
tôi nhận được:
"\C-i": complete
"\e\e": complete
"\e!": complete-command
"\e/": complete-filename
...
"\e\C-i": dynamic-complete-history
"\eg": glob-complete-word
"\e*": insert-completions
# menu-complete (not bound)
...
"\C-x/": possible-filename-completions
Đây là nơi TAB = ctrl-i được liên kết với complete
chức năng cơ bản . Các ràng buộc khác trên archlinux của tôi, tôi vừa thử. Với "ta [esc] [star]" tôi có thể nhận được tất cả các lệnh bắt đầu bằng "ta" được chèn trên dòng lệnh của mình.
Hàm complete
readline được giải thích trong man bash:
Hoàn thành
hoàn thành (TAB)
Cố gắng thực hiện hoàn thành trên văn bản trước điểm. Nỗ lực Bash hoàn thành xử lý các văn bản như một biến
(nếu văn bản bắt đầu với $), tên (nếu văn bản bắt đầu với ~), tên máy (nếu văn bản bắt đầu với @) hoặc lệnh (kể cả bí danh và chức năng) lần lượt. Nếu không có cái nào tạo ra sự trùng khớp, thì
việc hoàn thành tên tệp sẽ được thử.
Tôi chỉ có thể tái tạo một phần này. Tôi nghĩ người đàn ông bash quên đề cập đến nó phụ thuộc vào việc bạn [tab] một từ đầu tiên hay một từ thứ 2, thứ 3, v.v.
Tôi có các tập tin bắt đầu bằng "ba" trong thư mục nhà / công việc của tôi. Khi tôi gõ "ba [tab]" tại dấu nhắc, tôi không nhận được các tên này, chỉ có các lệnh từ badblocks
đến bashbug
. Đây là một hành vi lành mạnh: từ đầu tiên cung cấp cho bạn các lệnh, các từ sau tên tệp. Và nếu bạn gõ "$ [tab]", bạn thực sự có được một danh sách tên biến rất hay.
Thực tế khi tôi nói [tab], ý tôi là [tab] [tab]. Nhưng chúng ta đã quá quen với điều này đến nỗi chúng ta thậm chí không nhận thấy chức năng đọc "hoàn chỉnh" này là gì. Với các biến thể "hoàn thành-", bạn có thể kiểm soát những gì được tìm kiếm (lệnh, tên tệp, biến) và phải làm gì với danh sách nếu có nhiều hơn một kết quả khớp (khả năng).
Các hàm readline đi kèm với nhiều ràng buộc mặc định. Cả hai man bash
và man readline
liệt kê các chức năng và các ràng buộc mặc định của chúng. Để kiểm tra sử dụng bind -p như trên. Đây cũng là cơ sở cho các ~/.inputrc
tập tin. Tôi vừa tạo một cái (chỉ có một loại tiền điện tử / etc / inputrc):
set colored-completion-prefix on
set colored-stats on
Với số liệu thống kê màu tôi nhận được một danh sách màu, như với ls --color
. Sau khi "bi [tab] [tab]" Tôi thấy "liên kết" màu trắng và "bison" màu xanh lá cây, nói với tôi rằng "liên kết" không phải là một thực thi (nhưng là một ... mở rộng ... "Liên kết" thậm chí không phải là tên tệp!).
set show-all-if-ambiguous on
Điều này kiểm soát tab so với tab đôi. Sau khi tôi thêm nó và gõ
cd s[tab]
Tôi trực tiếp nhận được một danh sách màu của tất cả các tên TẬP TIN. Thư mục, liên kết, tập tin bình thường, vv tất cả xuất hiện trong màu sắc riêng của họ.
Những biến readline bạn có thể thấy với bind -v
. Để kiểm tra thay đổi .inputrc, bắt đầu một bash mới bằng "bash", rồi thoát. Hoặc đăng nhập lại.
Lớp tiếp theo nằm trong/usr/share/bash-completion
Nó chứa mỗi tập lệnh, hầu hết từ các gói linux-linux và systemd. Có một tập tin mount (2 Kb) và systemctl (13 Kb). Tập tin gắn kết rất thú vị: nó cung cấp cho bạn / Proc / hệ thống tập tin sau khi bạn nhập "-t".
Thông thường sau khi "mount -t [tab]", tôi nhận được TÊN. Sau khi tôi lấy tệp "mount" đó, tôi thực sự nhận được các loại fs như ext2, ext3 và ext4. Tôi đi:
complete -r mount
để loại bỏ tính năng này. (ĐÂY complete
là lệnh dựng sẵn shell)
Lớp thứ ba là gói "hoàn thành bash" bổ sung . Tôi đã gỡ cài đặt nó sau khi tôi đã cài đặt nó để thử nghiệm. Với gói này, tôi có tính năng mở rộng tùy chọn này và cả tên gói. Tôi có thể gõ "tar - [tab]" và tôi thấy tất cả các tùy chọn. Nhưng việc mở rộng tên tệp đã bị mất trong nhiều chòm sao. Amd không chỉ trên archlinux.
Gói hoàn thành bash này đã cho tôi một tập lệnh 2000 "bash_completion" và rất nhiều tệp lệnh. Một cho "tar" là 700 dòng, có đầy đủ các chức năng. Vì vậy, sửa lỗi này là không có giải pháp.
Nếu bạn thực sự quan tâm đến các thẻ hoàn chỉnh [tab] này, bạn phải bắt đầu ở phía dưới và chọn một hoặc hai hàm đọc khác ngoài complete
liên kết với các khóa khác ngoài [tab]. Cấu hình mặc định của tôi ở trên thực sự hoạt động, nhưng tôi chưa bao giờ sử dụng bất cứ thứ gì ngoài [tab]. Bây giờ tôi muốn đặt đúng chức năng cho các phím bên phải. Có hoặc không có gói bash-hoàn thành tùy chọn mở rộng.