#! /bin/sh -f ############################################################################## # # remexec # ############################################################################## ##### Parse Option ########################################################### while getopts "h:u:" FLAG; do case ${FLAG} in h) TARGET="${OPTARG}" ;; u) REMUSER="${OPTARG}@" ;; esac done shift $(( ${OPTIND} - 1 )) SCRIPTS="${@}" if [ -z "$TARGET" -o -z "${SCRIPTS}" ]; then echo >&2 "Usage: $0 -h Target [-u user] scripts" exit 1 fi if [ -z "${REMUSER}" ]; then REMUSER="${USER}@" fi ##### Check Scripts ########################################################## ERROR=0 for i in ${SCRIPTS}; do if [ ! -e "${i}" ]; then echo "Error ${i} is not exist" ERROR=1 fi done if [ ${ERROR} -ne 0 ]; then exit 1 fi unset ERROR ##### Generate Scripts ####################################################### atexit() { [ ! -z "${TMPFILE}" ] && rm -f "${TMPFILE}" } trap atexit EXIT trap 'trap - EXIT; atexit; exit -1' INT PIPE TERM TMPFILE=$(mktemp) cat << __END__ >> ${TMPFILE} #! /bin/sh ##### Preamble SUDO=`which sudo` [ -z "\${SUDO}" ] && echo "Do not have sudo!. exit" && exit 1 __END__ for i in ${SCRIPTS}; do echo "##### from ${i}" >> ${TMPFILE} cat ${i} >> ${TMPFILE} done ##### Execute Scripts ######################################################## TGTSCR=`ssh -q ${REMUSER}${TARGET} mktemp` scp -q -rp ${TMPFILE} "${REMUSER}${TARGET}:${TGTSCR}" ssh -q -t "${REMUSER}${TARGET}" "/bin/sh ${TGTSCR}" ssh -q "${REMUSER}${TARGET}" "/bin/rm ${TGTSCR}"