shell - Bash Completion script to complete file path after certain arguments options -
i writing bash completion script command-line tool:
_plink() {     local cur prev opts     compreply=()     cur="${comp_words[comp_cword]}"     prev="${comp_words[comp_cword-1]}"     opts="--1 --23file --a1-allele --a2-allele --adjust --aec"      if [[ ${cur} == --*file ]] || [[ ${cur} == --out ]];         compreply=( $(compgen -w "$(ls)" -- ${cur}) )     elif [[ ${cur} == -* ]] ;         compreply=( $(compgen -w "${opts}" -- ${cur}) )         return 0     fi } complete -f _plink plink1.9   the idea if after option --*file , --out, bash should autocomplete file path. right using "$(ls)" completes filenames in current working path. suggestions?
you can use compgen -f complete filenames, this:
if [[ ${prev} == --*file ]] || [[ ${prev} == --out ]];     compreply=( $(compgen -f -- ${cur}) ) elif ...   however, compgen -f isn't great @ completing filenames because doesn't honour spaces in filenames.
a better way use _filedir function available in bash-completion-lib. might available on system (type: declare -f _filedir check).
using _filedir, completion function becomes:
if [[ ${prev} == --*file ]] || [[ ${prev} == --out ]];     _filedir elif ...      
Comments
Post a Comment