Hoàn thành tab bash tùy chỉnh


34

Tôi có tiện ích bàn điều khiển tùy chỉnh cooltoolvới danh sách các tùy chọn

fooOption
barOption

Tôi nên làm gì để có thể bash tự động hoàn thành các tùy chọn bằng cách nhấn tabphím?

Ý tôi là người dùng đã gõ

$ ./cooltool foo_

rồi ấn tab. Và sau đó

$ ./cooltool fooOption _

xuất hiện.


1
Đừng đăng chéo.
Wuffers

2
Lưu ý rằng cái này được di chuyển và cái kia thì không. Tôi nghĩ rằng nhiều người dùng vẫn không nhận ra rằng họ không nên đăng câu hỏi trên nhiều trang SE. Chúng được sử dụng để phân biệt các diễn đàn không phải là một hệ thống thống nhất, nơi bạn có thể hỏi trong một vài diễn đàn khác nhau để có cơ hội trả lời nhanh hơn.
jcrawfordor

Câu trả lời:


2

Viết một kịch bản hoàn thành bash cho cooltool. Các bash hoàn thành gói đi kèm với kịch bản cho nhiều chương trình phổ biến, mà bạn có thể sử dụng làm ví dụ.


40

Cách đơn giản nhất là thêm phần sau vào .bashrc của bạn.

_cooltool()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "fooOption barOption" -- $cur) )
}
complete -F _cooltool cooltool

Bất cứ khi nào bạn gõ cooltool f[TAB][TAB], _cooltool()chức năng được gọi. Nó sẽ tìm ra từ một phần hiện tại của bạn là gì và sau đó compgensẽ tìm ra các tùy chọn phù hợp. Chúng được lưu trữ trong một mảng được gọi COMPREPLYlà sau đó được hiển thị. Nhìn vào man completeman compgenđể biết chi tiết.

Để xem hướng dẫn hay, hãy xem: Viết Hàm Bash Hoàn thành của riêng bạn




2

Ngoài câu trả lời của dogbane, bạn cũng có thể làm:

complete -W "fooOption barOption" cooltool

nếu bạn chỉ đơn giản muốn khớp một danh sách các từ từ đầu chuỗi. Có vẻ như hoàn thành và compgen chia sẻ hầu hết các tùy chọn. Tôi chỉ nhận thấy "bắt đầu chuỗi" khớp với các lệnh tôi sử dụng, vì vậy tôi thấy gọn gàng rằng bạn có thể làm những việc khác trong hàm _cooltool như:

COMPREPLY=( $(grep "$cur" ~/my_potential_args.txt) )

để phù hợp với bất cứ nơi nào trong tên tùy chọn.

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.