X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/9b49704959f4b7ecb482f3d1f87ba2735e1d7ed1..591c224584c04e0d6f58ece969946bd5472f7c89:/support/lsh diff --git a/support/lsh b/support/lsh index 20ebc3d0..8ccc5a26 100755 --- a/support/lsh +++ b/support/lsh @@ -6,18 +6,28 @@ # we get a -l USER option, we try to use "sudo -u USER" to run the # command. -prefix='' - -cd # Default path is home dir, just like ssh. +user='' +do_cd=y # Default path is user's home dir, just like ssh. while : ; do case "$1" in - -l) shift ; prefix="sudo -u $1"; shift ;; - -l*) prefix=`echo $1 | sed 's/-l/sudo -u /'`; shift ;; + -l) user="$2"; shift; shift ;; + -l*) user=`echo "$1" | sed 's/^-l//'`; shift ;; + --no-cd) do_cd=n; shift ;; -*) shift ;; localhost) shift; break ;; - *) exit 1 ;; + *) echo "lsh: unable to connect to host $1" 1>&2; exit 1 ;; esac done -eval $prefix "${@}" +if [ "$user" ]; then + prefix='' + if [ $do_cd = y ]; then + home=`perl -e "print((getpwnam('$user'))[7])"` + prefix="cd '$home' ;" + fi + sudo -H -u "$user" sh -c "$prefix $*" +else + [ $do_cd = y ] && cd + eval "${@}" +fi