[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
và /usr/share/bash-completion/completions
cho Bash).
Tuy nhiên, tất cả những điều này là gọi lệnh tích complete
hợ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_completion
và nối thêm
source ~/.myscript_completion
để ~/.bashrc
.