mirror of https://github.com/ohmyzsh/ohmyzsh.git
Merge 4de06d21e0
into 6e9cda3d30
This commit is contained in:
commit
5dc056f262
|
@ -0,0 +1,6 @@
|
|||
# `do_sudo` plugin
|
||||
|
||||
This plugin provides a sudo wrapper that handles alias expansion and avoids
|
||||
being broken by `nocorrect` `noglob` from other aliases.
|
||||
|
||||
Modified from the script by [Wayne Davison](https://www.zsh.org/mla/users/2008/msg01229.html).
|
|
@ -0,0 +1,55 @@
|
|||
if [[ "$ENABLE_CORRECTION" == "true" ]]; then
|
||||
alias sudo='nocorrect noglob _do_sudo '
|
||||
else
|
||||
alias sudo='noglob _do_sudo '
|
||||
fi
|
||||
|
||||
function _do_sudo() {
|
||||
[[ -z ${__do_sudo_glob+x} ]] && __do_sudo_glob=1
|
||||
[[ -z ${__do_sudo_expanded+x} ]] && declare -A __do_sudo_expanded
|
||||
local -a args
|
||||
local -a cmd_alias_arr
|
||||
local cmd_alias
|
||||
local return_value
|
||||
while (($#)); do
|
||||
case "$1" in
|
||||
command|exec|-) shift; break ;;
|
||||
nocorrect) shift ;;
|
||||
noglob) __do_sudo_glob=0; shift ;;
|
||||
[1-9]) args+=( $1 ); shift ;;
|
||||
*)
|
||||
cmd_alias="$(command -v 2>/dev/null -- "$1")"
|
||||
if [[ "$?" -eq 0 ]] && [[ "$cmd_alias" == 'alias'* ]] && [[ -z "$__do_sudo_expanded["$1"]" ]]; then
|
||||
__do_sudo_expanded["$1"]=1
|
||||
IFS=' ' read -A cmd_alias_arr <<< "$(sed -e "s/[^=]*=//" -e "s/^'//" -e "s/'$//" <<< "$cmd_alias")"
|
||||
args+=( "${cmd_alias_arr[@]}" )
|
||||
shift
|
||||
break
|
||||
else
|
||||
if ((__do_sudo_glob)); then
|
||||
args+=( $~==1 )
|
||||
else
|
||||
args+=( $==1 )
|
||||
fi
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
if [[ ${#cmd_alias_arr[@]} -gt 0 ]]; then
|
||||
_do_sudo "${args[@]}" $==*
|
||||
else
|
||||
if ((__do_sudo_glob)); then
|
||||
PATH="/sbin:/usr/sbin:/usr/local/sbin:$PATH" command sudo "${args[@]}" $~==*
|
||||
else
|
||||
PATH="/sbin:/usr/sbin:/usr/local/sbin:$PATH" command sudo "${args[@]}" $==*
|
||||
fi
|
||||
return_value=$?
|
||||
unset __do_sudo_glob
|
||||
unset __do_sudo_expanded
|
||||
return $return_value
|
||||
fi
|
||||
}
|
||||
|
||||
command -v _sudo >/dev/null 2>&1
|
||||
[[ $? -eq 0 ]] && compdef _sudo '_do_sudo'
|
Loading…
Reference in New Issue