[F] або заради елегантності і портативності, я прагну забезпечити автозаповнення всередині самого сценарію.
Ви не можете зробити це зсередини скрипта оболонки.
Традиційно завершення Bash для сценаріїв і двійкових файлів обробляється записами в призначених каталогах (наприклад, /etc/bash_completion.d
і /usr/share/bash-completion/completions
для Bash).
Однак, все це робить виклик вбудованої команди complete
з відповідними параметрами. Під час першого виклику сценарію ви можете просто зробити запис в одному з цих каталогів (вимагає привілеїв root) або ~/.bashrc
.
Основний синтаксис у наступному:
# 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
Наприклад, ви можете зберегти вказане вище ~/.myscript_completion
і додайте
source ~/.myscript_completion
до ~/.bashrc
.