Làm cách nào tôi có thể nói bash hoàn thành tab hợp lệ cho các đối số cho tập lệnh Python của tôi


14

Giả sử tôi có một chương trình hello.py và một đối số hợp lệ có thể xảy ra với nó là:

./hello.py autoawesomesauce

Có thể gõ vào:

./hello.py auto[tab]

tại điểm mà đối số đã hoàn thành một phần được gửi đến hello, nó nhận ra nó như vậy và sau đó hoàn thành nó trên shell để:

./hello.py autoawesomesauce

Tôi biết git làm một cái gì đó như thế này, nhưng nó có thể được thực hiện cho một kịch bản Python + Bash không?


4
Kịch bản Python không thể. bash phải.

upvote cho chính xác những gì?

Câu trả lời:


7

Trên các hệ thống Linux, bạn thường có thể tìm thấy một số lượng lớn các tập lệnh mẫu trong : /etc/bash_completion.d. Nếu bạn lấy các tập lệnh này, thì bạn sẽ có được hành vi tự động hoàn thành.

Tôi đã bao gồm một ví dụ từ thư mục đó. Đây là kịch bản hoàn thành cho unrar.

_unrar()
{
    local cur

    COMPREPLY=()
    _get_comp_words_by_ref cur

    if [[ "$cur" == -* ]] ; then
        COMPREPLY=( $( compgen -W '-ad -ap -av- -c- -cfg- -cl -cu \
            -dh -ep -f -idp -ierr -inul -kb -o+ -o- -ow -p -p- -r -ta \
            -tb -tn -to -u -v -ver -vp -x -x@ -y' -- "$cur" ) )
    else
        if [ $COMP_CWORD -eq 1 ]; then
            COMPREPLY=( $( compgen -W 'e l lb lt p t v vb vt x' -- "$cur" ) )
        else
            _filedir '@(rar|RAR)'
        fi
    fi

} &&
complete -F _unrar -o filenames unrar

_get_comp_words_by_ref
điện tử

4

Chức năng này không có gì để làm với Python. Đây là một chức năng thuần túy của vỏ lót. Vì vậy, đọc các tài liệu bash về tự động hoàn thành.

Google cho "bash auto-finish" và bạn sẽ tìm thấy ít nhất 5 tài liệu hợp lý trong 10 lần truy cập đầu tiên.


Điều đó có nghĩa là có thể nên bọc tập lệnh Python của bạn trong tập lệnh Bash, để tập lệnh Bash thực hiện càng nhiều thao tác xử lý / phân tích đối số càng tốt.
Kazark

0

Xem bài đăng StackOverflow liên quan này .

complete 'your_command' 'p/*/`echo list_of_your_options`/'
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.