# # Originally from: # #Message-ID: <3B13EC65.179451AE@wanadoo.fr> #Date: Tue, 29 May 2001 20:37:25 +0200 #From: Manu Rouat #Subject: [bash] Universal command options completion? # # #In the recent versions of bash (after 2.04) programmable #completion is available. A useful completion function #is , for a particular command, to enumerate all flags #that can be used in the command. Now, most GNU unix #commands have so-called 'long options' for example: # #ls --color=always --no-group --size # #and these are all listed when you issue a '--help' flag. #So the idea is to use that, then parse the output of the #'--help' and reinject this to compgen. The basis of the #following 'universal' completion funtion was the _configure_func' #written by Ian McDonnald (or is it Chet Ramey ?) #A dedicated function will always be better, but this is quite #convenient. I chose to use 'long options' because they are #easy to parse and explicit too (it's the point I guess...) #Lots of room for improvement ! _longopt_func () { case "$2" in -*) ;; *) return ;; esac case "$1" in \~*) eval cmd=$1 ;; *) cmd="$1" ;; esac COMPREPLY=( $("$cmd" --help | sed -e '/--/!d' -e 's/.*--\([^ ]*\).*/--\1/'| \ grep ^"$2" |sort -u) ) } complete -o default -F _longopt_func ldd wget bash id info # some examples that work