From 4641d6e29bb77342a80a494484f5575ad39bf3f8 Mon Sep 17 00:00:00 2001 Message-Id: <4641d6e29bb77342a80a494484f5575ad39bf3f8.1715762464.git.mdw@distorted.org.uk> From: Mark Wooding Date: Fri, 14 Jun 2013 12:32:24 +0100 Subject: [PATCH] hush: Don't lose backslashes in output lines. Organization: Straylight/Edgeware From: Mark Wooding --- debian/changelog | 6 ++++++ hush.in | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index ca7d1a7..30fff97 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +nsict-utils (1.2.8.3) experimental; urgency=low + + * hush: Don't lose backslashes in output lines. + + -- Mark Wooding Fri, 14 Jun 2013 12:32:10 +0100 + nsict-utils (1.2.8.2) experimental; urgency=low * hush: Close file descriptors around the command, so that we don't wait diff --git a/hush.in b/hush.in index 4359527..d5aebcb 100755 --- a/hush.in +++ b/hush.in @@ -145,10 +145,11 @@ EOF ## stage of a pipeline, where we actually wanted the status of the first. So ## we write that to another pipe (fd 5) and pick it out using command ## substitution. +copy () { while IFS= read -r line; do printf "%s %s\n" "$1" "$line"; done; } rc=$( { { { { set +e; $lbuf "$cmd" "$@" 3>&- 4>&- 5>&-; 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 -u >&3; } 5>&1