#########################################################################
set -e
-set -o pipefail
+
+# set -o pipefail
######################################################################
temporary directory on a ssh-accessible server.
It parses the script first to find embedded arguments which defines
- the hostname on which to run it, the files to send, the files to
- get back when the execution is done, and commands to execute before
+ the hostname on which to run, the files to send, the files to get
+ back when the execution is over, and commands to execute before
running the executable remotely.
These arguments can appear multiple times, except the one that
function cleanup_remote_tmp () {
if [[ "${REMOTE_HOST}" ]] && [[ "${REMOTE_DIR}" ]]
then
- echo "Clean up remote workdir."
+ echo "xremote: Clean up remote workdir."
ssh "${REMOTE_HOST}" "rm -rf \"${REMOTE_DIR}\""
fi
}
EXEC)
check_remote_is_defined
+ [[ "${REMOTE_EXEC}" ]] && (exit "Remote executable already defined!" >&2 && exit 1)
REMOTE_EXEC="${value}"
;;
PRE)
check_remote_is_defined
+ echo "xremote: ${value}"
ssh < /dev/null "${REMOTE_HOST}" "cd \"${REMOTE_DIR}\" && ${value}"
;;
SEND)
check_remote_is_defined
- tar c "${value}" | ssh "${REMOTE_HOST}" "cd \"${REMOTE_DIR}\" && tar mx"
+ echo "xremote: -- sending files --------------------------------------------"
+ tar ch ${value} | ssh "${REMOTE_HOST}" "cd \"${REMOTE_DIR}\" && tar mxv"
;;
HOST)
[[ "${REMOTE_DIR}" ]] && (exit "Remote host already defined!" >&2 && exit 1)
REMOTE_HOST="${value}"
[[ "${REMOTE_HOST}" ]] || REMOTE_HOST="${XREMOTE_HOST}"
- [[ "${REMOTE_HOST}" ]] || (echo "No remote host specified." >&2 && exit 1)
- REMOTE_DIR="$(ssh </dev/null "${REMOTE_HOST}" mktemp -d /tmp/xremote.from_"$(hostname)_$(date +%Y%m%d)".XXXXXX)"
+ [[ "${REMOTE_HOST}" ]] || (echo "xremote: No remote host specified." >&2 && exit 1)
+ REMOTE_DIR="$(ssh </dev/null "${REMOTE_HOST}" mktemp -d /tmp/xremote.from_"$(hostname)_$(date +%Y%m%d-%H%M%S)".XXXXXX)"
+ echo "xremote: target is ${REMOTE_HOST}"
;;
esac
fi
tar c "${main}" | ssh "${REMOTE_HOST}" "cd \"${REMOTE_DIR}\" && tar mx"
-echo "On ${REMOTE_HOST}"
+echo "xremote: -- running the executable -----------------------------------"
if [[ "${REMOTE_EXEC}" ]]
then
fi
ssh </dev/null "${REMOTE_HOST}" "cd \"${REMOTE_DIR}\" && ${REMOTE_COMMAND}"
-echo "----------------------------------------------------------------------"
######################################################################
# Disable globbing to keep wildcards for the remote side
+echo "xremote: -- retrieving files -----------------------------------------"
+
set -f
while read line
case "${label}" in
GET)
check_remote_is_defined
- ssh </dev/null "${REMOTE_HOST}" "cd \"${REMOTE_DIR}\" && tar c ${value}" | tar mxv
+ ssh </dev/null "${REMOTE_HOST}" "cd \"${REMOTE_DIR}\" && tar 2>/dev/null c ${value}" | tar mxv
;;
esac
fi
set +f
+echo "xremote: -- finished -------------------------------------------------"
+
######################################################################