mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-11-23 22:30:07 +00:00
do_sudo: recursive alias expansion
This commit is contained in:
parent
d05feb1f8e
commit
7f4d633f46
1 changed files with 32 additions and 8 deletions
|
@ -5,21 +5,45 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
function _do_sudo() {
|
function _do_sudo() {
|
||||||
integer glob=1
|
[[ -z ${__do_sudo_glob+x} ]] && __do_sudo_glob=1
|
||||||
local -a run
|
[[ -z ${__do_sudo_expanded+x} ]] && declare -A __do_sudo_expanded
|
||||||
run=( command sudo )
|
local -a args
|
||||||
|
local -a cmd_alias_arr
|
||||||
|
local cmd_alias
|
||||||
while (($#)); do
|
while (($#)); do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
command|exec|-) shift; break ;;
|
command|exec|-) shift; break ;;
|
||||||
nocorrect) shift ;;
|
nocorrect) shift ;;
|
||||||
noglob) glob=0; shift ;;
|
noglob) __do_sudo_glob=0; shift ;;
|
||||||
*) break ;;
|
*)
|
||||||
|
cmd_alias="$(command -v 2>/dev/null -- "$1")"
|
||||||
|
if [[ "$?" -eq 0 ]]; then
|
||||||
|
if [[ "$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[@]}" )
|
||||||
|
else
|
||||||
|
args+=( "$(sed "s/[^=]*=//" <<< "$(hash -v 2>/dev/null -- "$1")")" )
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
else
|
||||||
|
args+=( $1 )
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
if ((glob)); then
|
if [[ ${#cmd_alias_arr[@]} -gt 0 ]]; then
|
||||||
PATH="/sbin:/usr/sbin:/usr/local/sbin:$PATH" $run $~==*
|
_do_sudo "${args[@]}" $==*
|
||||||
else
|
else
|
||||||
PATH="/sbin:/usr/sbin:/usr/local/sbin:$PATH" $run $==*
|
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
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue