Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

sudo user-command-1; also-sudoed-command-2



How can I execute a block of arbitrary commands
with sudo, but only having to type sudo once,
and still be able to use the user functions?
I.e., because of the last demand, this:

    $ sudo zsh -c "command-1; ...; command-n"

won't do if command-1 is a user function
or alias!

Instead, this, as a user which has an "ll" ls
alias, and no permissions at /

    $ zudo ll /; touch /test

should be the equivalent of

    $ sudo ll /; sudo touch /test

which should be executed.

Here is the solution so far:

# [1]
accept-line () {
    local words
    words=( $=BUFFER )
    case $words[1] in
        (zudo) BUFFER="zudo-f ${(q-)words[2,-1]}" ;;
    esac
    zle .accept-line
}
zle -N accept-line

# [2]
zudo-f () {
    local funs_str=$1

    local -a funs
    funs=("${(@s/;/)funs_str}")

    for f in $funs; do
        eval "sudo $f"
    done
}
alias sudo='sudo '

# [3]
alias ll="ls -lh"

I'm grateful for any improvements to be made :)


[1] http://user.it.uu.se/~embe8573/conf/.zsh/todo
[2] http://user.it.uu.se/~embe8573/conf/.zshrc
[3] http://user.it.uu.se/~embe8573/conf/.zsh/ls

--
underground experts united .... http://user.it.uu.se/~embe8573
Emacs Gnus Blogomatic ......... http://user.it.uu.se/~embe8573/blogomatic
                   - so far: 30 Blogomatic articles -



Messages sorted by: Reverse Date, Date, Thread, Author