chiark / gitweb /
rsync-backup.in: Handle backslashes correctly in command output.
authorMark Wooding <mdw@distorted.org.uk>
Fri, 14 Jun 2013 23:07:56 +0000 (00:07 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Fri, 14 Jun 2013 23:07:56 +0000 (00:07 +0100)
rsync-backup.in

index ec876ed9ce037a9b876eac6baa1a0c1e2d658b52..0ee11508955b44e62da6639b9482a182ba906d4e 100644 (file)
@@ -78,6 +78,15 @@ maybe () {
   esac
 }
 
+copy () {
+  prefix=$1
+  ## Copy lines from stdin to stdout, adding PREFIX.
+
+  while IFS= read -r line; do
+    printf "%s %s\n" "$prefix" "$line"
+  done
+}
+
 run () {
   tag=$1 cmd=$2; shift 2
   ## Run CMD, logging its output in a pleasing manner.
@@ -94,8 +103,8 @@ run () {
        { { { ( set +e
                "$cmd" "$@" 3>&- 4>&- 5>&- 9>&-
                echo $? >&5; ) |
-             while IFS= read line; do echo "| $line"; done >&4; } 2>&1 |
-           while IFS= read line; do echo "* $line"; done >&4; } 4>&1 |
+             copy "|" >&4; } 2>&1 |
+           copy "*" >&4; } 4>&1 |
          cat >&9; } 5>&1 </dev/null
       )
       case $rc in