Added @XREMOTE_EXEC.
[xremote.git] / xremote.sh
index 9b753e0..59e588c 100755 (executable)
@@ -34,7 +34,7 @@ function check_remote_is_defined () {
 
 function help () {
     cat <<EOF
-xremote.sh <executable>
+xremote.sh <script>
 
   This script takes a script as argument and executes it remotely in a
   temporary directory on a ssh-accessible server.
@@ -54,7 +54,10 @@ xremote.sh <executable>
     @XREMOTE_GET: *.dat
     @XREMOTE_PRE: ln -s /home/fleuret/data/pytorch ./data
 
- Contact <francois@fleuret.org> for comments.
+  If no argument is provided to @XREMOTE_HOST, the environment
+  variable $XREMOTE_HOST is used instead
+
+  Contact <francois@fleuret.org> for comments.
 
 EOF
     return 0
@@ -91,6 +94,11 @@ do
 
         case "${label}" in
 
+            EXEC)
+                check_remote_is_defined
+                REMOTE_EXEC="${value}"
+                ;;
+
             PRE)
                 check_remote_is_defined
                 ssh < /dev/null "${REMOTE_HOST}" "cd \"${REMOTE_DIR}\" && ${value}"
@@ -103,8 +111,9 @@ do
 
             HOST)
                 [[ "${REMOTE_DIR}" ]] && (exit "Remote host already defined!" >&2 && exit 1)
-                cleanup_remote_tmp
-                REMOTE_HOST=${value}
+                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)"
                 ;;
         esac
@@ -121,7 +130,15 @@ tar c "${main}" | ssh "${REMOTE_HOST}" "cd \"${REMOTE_DIR}\" && tar mx"
 echo "----------------------------------------------------------------------"
 echo "-- On ${REMOTE_HOST}"
 echo "----------------------------------------------------------------------"
-ssh </dev/null "${REMOTE_HOST}" "cd \"${REMOTE_DIR}\" && ./$(basename "${main}")"
+
+if [[ "${REMOTE_EXEC}" ]]
+then
+    REMOTE_COMMAND="${REMOTE_EXEC} ${main}"
+else
+    REMOTE_COMMAND="./${main}"
+fi
+
+ssh </dev/null "${REMOTE_HOST}" "cd \"${REMOTE_DIR}\" && ${REMOTE_COMMAND}"
 echo "----------------------------------------------------------------------"
 
 ######################################################################