On 10.02.2020 20:13, dana wrote: > diff --git a/Completion/Unix/Command/_sudo > b/Completion/Unix/Command/_sudo > index 41e32cbae..52b212176 100644 > --- a/Completion/Unix/Command/_sudo > +++ b/Completion/Unix/Command/_sudo > @@ -54,6 +54,18 @@ else > '(-)1:command: _command_names -e' > '*::arguments:{ _comp_priv_prefix=( $cmd -n ${(kv)opt_args[(I)(-[ugHEP]|--(user|group|set-home|preserve-env|preserve-groups))]} ) ; _normal }' > ) > + > + # By default, _command_names uses the current PATH to complete commands. This > + # doesn't necessarily make sense for sudo on systems that use its secure_path > + # feature -- a common issue is that /**/sbin appear in secure_path but not in > + # unprivileged users' PATHs. Ideally we could parse the correct value out of > + # `sudo -l`, but since that requires a password it won't work half the time. > + # To do the right thing in the most common cases, we'll simply ensure that the > + # sbin variants always appear in the default command-path (bash-completion's > + # _sudo does something similar) > + zstyle -t ":completion:${curcontext}:" command-path || > + zstyle -e ":completion:${curcontext%:}:*" command-path \ > + 'reply=( $path ${path/%\/bin//sbin} )' > fi > > _arguments -s -S $args > Didn't see all the file, but probably 'su' and variants need something similar also? One of the "solutions" (https://forums.gentoo.org/viewtopic-p-7978544.html?sid=fd1853347362adf53e40a5a0320030a8#7978544): |[[ $UID -eq 0 ]] || () {|| ||        local i|| ||        local -T SUDO_PATH sudo_path|| ||        local -U sudo_path=($path {,/usr{,/local}}/sbin(N-/))|| || ||        for i in su{,do}; do|| ||                zstyle ":completion:*:$i:*" environ PATH="$SUDO_PATH"|| ||        done|| ||}|