zsh-users
 help / color / mirror / code / Atom feed
* sudo user-command-1; also-sudoed-command-2
@ 2016-05-16 17:22 Emanuel Berg
  2016-05-17 10:43 ` Bart Schaefer
  0 siblings, 1 reply; 9+ messages in thread
From: Emanuel Berg @ 2016-05-16 17:22 UTC (permalink / raw)
  To: zsh-users

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 -


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2016-05-18  1:32 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-16 17:22 sudo user-command-1; also-sudoed-command-2 Emanuel Berg
2016-05-17 10:43 ` Bart Schaefer
2016-05-17 15:31   ` Nikolay Aleksandrovich Pavlov (ZyX)
2016-05-17 19:58     ` Emanuel Berg
2016-05-17 20:04       ` Nikolay Aleksandrovich Pavlov (ZyX)
2016-05-18  1:31         ` Emanuel Berg
2016-05-17 19:51   ` Emanuel Berg
2016-05-17 19:54     ` Nikolay Aleksandrovich Pavlov (ZyX)
2016-05-17 20:10       ` Emanuel Berg

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).