X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/9b49704959f4b7ecb482f3d1f87ba2735e1d7ed1..bd685982389b78a158921b7839bdeca501338d19:/support/lsh diff --git a/support/lsh b/support/lsh index 20ebc3d0..b63444e3 100755 --- a/support/lsh +++ b/support/lsh @@ -6,18 +6,30 @@ # 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 + if [ $do_cd = y ]; then + cd || exit 1 + fi + eval "${@}" +fi