From d0b47bde0e2f5bae7502ca55b80ab006523db820 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 12 Jul 2019 01:06:33 +0200 Subject: Fix bzgrep so it doesn't always return a 0 exit code with multiple archives MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The bzgrep wrapper always returns 0 as exit code when working on multiple archives, even when the pattern is not found. Fix from openSUSE by Kristýna Streitová https://bugzilla.suse.com/970260 --- bzgrep | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) mode change 100644 => 100755 bzgrep (limited to 'bzgrep') diff --git a/bzgrep b/bzgrep old mode 100644 new mode 100755 index 5080afd..0314ca6 --- a/bzgrep +++ b/bzgrep @@ -65,8 +65,20 @@ for i do else j=$(echo "$i" | sed 's/\\/&&/g;s/|/\\&/g;s/&/\\&/g') j=`printf "%s" "$j" | tr '\n' ' '` - bzip2 -cdfq "$i" | $grep $opt "$pat" | sed "s|^|${j}:|" - r=$? + # A trick adapted from + # https://groups.google.com/forum/#!original/comp.unix.shell/x1345iu10eg/Nn1n-1r1uU0J + # that has the same effect as the following bash code: + # bzip2 -cdfq "$i" | $grep $opt "$pat" | sed "s|^|${j}:|" + # r=${PIPESTATUS[1]} + exec 3>&1 + eval ` + exec 4>&1 >&3 3>&- + { + bzip2 -cdfq "$i" 4>&- + } | { + $grep $opt "$pat" 4>&-; echo "r=$?;" >&4 + } | sed "s|^|${j}:|" + ` fi test "$r" -ne 0 && res="$r" done -- cgit v1.2.3-55-g6feb