sudo: Handle options (Alioth: #311414).

This commit is contained in:
Igor Murzov 2011-12-20 19:29:05 +04:00
parent 08a2264c82
commit 91a61afe59
4 changed files with 59 additions and 1 deletions

View File

@ -1727,7 +1727,7 @@ _root_command()
local root_command=$1
_command
}
complete -F _root_command fakeroot gksu gksudo kdesudo really sudo
complete -F _root_command fakeroot gksu gksudo kdesudo really
# Return true if the completion should be treated as running as root
_complete_as_root()

View File

@ -289,6 +289,7 @@ bashcomp_DATA = a2x \
sshmitm \
sshow \
strace \
sudo \
svk \
sync_members \
sysbench \

48
completions/sudo Normal file
View File

@ -0,0 +1,48 @@
# bash completion for sudo(8) -*- shell-script -*-
_sudo()
{
local cur prev words cword
_init_completion || return
local i 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
[[ ${COMP_WORDS[i]} == -@(u|U|g|C|p) ]] && ((i++))
if [[ ${COMP_WORDS[i]} == -e ]]; then
mode=edit
break
fi
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
# ex: ts=4 sw=4 et filetype=sh

View File

@ -32,6 +32,15 @@ assert_complete_dir "default/" "sudo mount /dev/sda1 def" $::srcdir/fixtures/sha
sync_after_int
set test "sudo -e should complete filenames and directories"
set dir $::srcdir/fixtures/shared/default
set files {foo foo.d/}
assert_complete_dir $files "sudo -e -u root bar foo" $dir $test
sync_after_int
# Find user/group suitable for testing.
set failed_find_unique_completion 0
foreach ug {user group} {