chiark / gitweb /
rsync-backup.in (run): Option to preserve standard input.
authorMark Wooding <mwooding@good.com>
Fri, 10 Apr 2015 14:19:25 +0000 (15:19 +0100)
committerMark Wooding <mwooding@good.com>
Mon, 18 May 2015 15:53:04 +0000 (16:53 +0100)
Usually we close stdin and redirect from /dev/null so that SSH doesn't
hang forever; but sometimes it's actually important.

rsync-backup.in

index a9145d66bfa897a93ddb8fe17a381788d3f129e0..e9bb3bebfe5230253d73f27d153cdf18daf1df8e 100644 (file)
@@ -83,6 +83,14 @@ copy () {
 }
 
 run () {
+  stdinp=nil
+  while :; do
+    case $1 in
+      -stdin) stdinp=t; shift ;;
+      --) shift; break ;;
+      *) break ;;
+    esac
+  done
   tag=$1 cmd=$2; shift 2
   ## Run CMD, logging its output in a pleasing manner.
 
@@ -95,12 +103,13 @@ run () {
     nil)
       log "BEGIN $tag"
       rc=$(
+       case $stdinp in nil) exec </dev/null ;; esac
        { { { ( set +e
                "$cmd" "$@" 3>&- 4>&- 5>&- 9>&-
                echo $? >&5; ) |
              copy "|" >&4; } 2>&1 |
            copy "*" >&4; } 4>&1 |
-         cat >&9; } 5>&1 </dev/null
+         cat >&9; } 5>&1
       )
       case $rc in
        0) log "END $tag" ;;