Tự động hoàn thành mã cụ thể trong shell


4

Tôi tạo ra rất nhiều kịch bản nhỏ để giúp tôi trong cuộc sống hàng ngày. Tôi muốn cung cấp tự động hoàn thành cho họ, đặc biệt là tôi dự định chia sẻ chúng với mọi người.

Bây giờ, tôi biết rằng tôi có thể tạo các chức năng tự động hoàn tất có nguồn gốc khi đăng nhập, nhưng vì mục đích thanh lịch và tính di động, tôi tìm cách cung cấp tự động hoàn thành bên trong tập lệnh.

Khi tôi sử dụng zsh tại nhà và bash trên VPS của mình, tôi muốn tập lệnh có thể di động (hoặc chuyển đổi hành vi theo shell), nhưng tôi sẽ hài lòng với một giải pháp cho cả hai môi trường.

Câu trả lời:


1

[F] hoặc vì mục đích thanh lịch và tính di động, tôi tìm cách cung cấp tự động hoàn thành bên trong tập lệnh.

Bạn không thể làm điều này từ bên trong tập lệnh shell.

Theo truyền thống, việc hoàn thành Bash cho các tập lệnh và nhị phân được xử lý bởi các mục trong các thư mục được chỉ định (ví dụ: /etc/bash_completion.d/usr/share/bash-completion/completionscho Bash).

Tuy nhiên, tất cả những điều này là gọi lệnh tích completehợp với các tham số thích hợp. Khi gọi tập lệnh của bạn lần đầu tiên, bạn chỉ có thể tạo một mục trong một trong những thư mục đó (yêu cầu quyền root) hoặc trong ~/.bashrc.

Cú pháp cơ bản sau:

# declare function to pass to `complete'
_myscript() 
{
    # declare variable `cur' (holds string to complete) as local
    local cur

    # initialize completion (abort on fail)
    _init_completion || return

    # if string to complete (`cur') begins with `-' (option)
    if [[ "$cur" == -* ]] ; then
        # complete to the following strings, if they start with `cur`
        COMPREPLY=( $( compgen -W '-a -b -c --foo --bar' -- "$cur" ) )
    else
        # otherwise, complete to elements in current directory that begin with `cur'
        _filedir -d
    fi

# if declaring the function was successful, use it when the command is `myscript'
} && complete -F _myscript myscript

Ví dụ: bạn có thể lưu ở trên ~/.myscript_completionvà nối thêm

source ~/.myscript_completion

để ~/.bashrc.


Không tệ; Tôi đã làm như vậy khi tập lệnh được gọi với --add-autocomplete, nó chạy chức năng tự động hoàn thành, vì vậy nó có thể có nguồn gốc khi khởi động.
Xananax
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.