1
0
Fork 0
mirror of https://github.com/ohmyzsh/ohmyzsh.git synced 2024-11-23 22:30:07 +00:00
ohmyzsh/plugins/do_sudo/do_sudo.plugin.zsh
2021-10-01 00:30:31 +10:00

48 lines
1.5 KiB
Bash

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
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
args+=( $1 )
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
unset __do_sudo_glob
unset __do_sudo_expanded
fi
}
command -v _sudo >/dev/null 2>&1
[[ $? -eq 0 ]] && compdef _sudo '_do_sudo'