# Linux modprobe(8) completion -*- shell-script -*- proc _modprobe { var cur = '', prev = '', words = '', cword = '', split = '' _init_completion -s || return match $prev { with -h|--help|-V|--version return with -C|--config _filedir return with -d|--dirname|-t|--type _filedir -d return with -S|--set-version _kernel_versions return } $split && return if [[ "$cur" == -* ]] { setglobal COMPREPLY = '( '$( compgen -W '$( _parse_help "$1" )' -- "$cur" ) ) if [[ ! $COMPREPLY ]] { setglobal COMPREPLY = '( '$( compgen -W '-a --all -b --use-blacklist -C --config -c --showconfig --dump-modversions -d --dirname --first-time --force-vermagic --force-modversion -f --force -i --ignore-install --ignore-remove -l --list -n --dry-run -q --quiet -R --resolve-alias -r --remove -S --set-version --show-depends -s --syslog -t --type -V --version -v --verbose' -- "$cur" ) ) } [[ $COMPREPLY == *= ]] && compopt -o nospace return } var i = '', mode = 'insert', module = '', version = $[uname -r] for (( i=1; i < $cword; i++ )); do case "${words[i]}" in -r|--remove) mode=remove ;; -l|--list) mode=list ;; --dump-modversions) mode=file ;; -S|--set-version) version=${words[i+1]} # -S is not $prev and not $cur ;; -C|--config|-d|--dirname|-t|--type) ((i++)) # skip option and its argument ;; -*) # skip all other options ;; *) [ -z "$module" ] && module=${words[i]} ;; esac done match $mode { with remove _installed_modules $cur with list # no completion available with file _filedir with insert # do filename completion if we're giving a path to a module if [[ "$cur" == @(*/|[.~])* ]] { _filedir '@(?(k)o?(.gz))' } elif [[ -n "$module" ]] { # do module parameter completion setglobal COMPREPLY = '( '$( compgen -W "$( PATH="$PATH:/sbin" modinfo \ -p "$module" 2>/dev/null | \ awk -F: '!/^[ \t]/ { print $1 }' )" -- "$cur" ) ) } else { _modules $version if [[ $COMPREPLY ]] { # filter out already installed modules var -a mods = '( '"${COMPREPLY[@]}" ) _installed_modules $cur for i in [$(!mods[@])] { for module in [$(COMPREPLY[@])] { if [[ ${mods[i]} == $module ]] { unset 'mods[i]' break } } } setglobal COMPREPLY = '( '"${mods[@]}" ) } } } } && complete -F _modprobe modprobe # ex: ts=4 sw=4 et filetype=sh