52 lines
1.3 KiB
Bash
52 lines
1.3 KiB
Bash
# bash completion for sudo(8) -*- shell-script -*-
|
|
|
|
_sudo()
|
|
{
|
|
local cur prev words cword
|
|
_init_completion || return
|
|
|
|
local i mode=normal
|
|
[[ $1 == *sudoedit ]] && mode=edit
|
|
|
|
[[ $mode == normal ]] &&
|
|
for (( i=1; i <= COMP_CWORD; i++ )); do
|
|
if [[ ${COMP_WORDS[i]} != -* ]]; then
|
|
local PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin
|
|
local root_command=${COMP_WORDS[i]}
|
|
_command_offset $i
|
|
return
|
|
fi
|
|
if [[ ${COMP_WORDS[i]} == -e ]]; then
|
|
mode=edit
|
|
break
|
|
fi
|
|
[[ ${COMP_WORDS[i]} == -[uUgCp] ]] && ((i++))
|
|
done
|
|
|
|
case "$prev" in
|
|
-u|-U)
|
|
COMPREPLY=( $( compgen -u -- "$cur" ) )
|
|
return
|
|
;;
|
|
-g)
|
|
COMPREPLY=( $( compgen -g -- "$cur" ) )
|
|
return
|
|
;;
|
|
-C|-p)
|
|
# argument required but no completions available
|
|
return
|
|
;;
|
|
esac
|
|
|
|
if [[ "$cur" == -* ]]; then
|
|
COMPREPLY=( $( compgen -W '-A -b -C -E -e -g -H -h -i -K -k -L -l -ll
|
|
-n -P -p -S -s -U -u -V -v' -- "$cur" ) )
|
|
return
|
|
fi
|
|
if [[ $mode == edit ]]; then
|
|
_filedir
|
|
fi
|
|
} && complete -F _sudo sudo sudoedit
|
|
|
|
# ex: ts=4 sw=4 et filetype=sh
|