X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=zgrep.in;fp=zgrep.in;h=cac4863f4270881138aa3c2a599dd884246172ac;hb=0161769885b1bdcc3d5f6699ade8f2b88c56e570;hp=9ddb55738e1150e0138015e988b57c6f02d63ec3;hpb=15eea35eec74f226bb721ebf0b3ee7473b1a5ff9;p=gzip diff --git a/zgrep.in b/zgrep.in index 9ddb557..cac4863 100755 --- a/zgrep.in +++ b/zgrep.in @@ -107,7 +107,24 @@ for i do else sed_script="s|^|${i}:|" fi - $grep $opt "$pat" | sed "$sed_script" + # Hack adapted from GPLed code at + # http://home.comcast.net/~j.p.h/cus-faq-2 + # Has the same effect as the following two lines of bash: + # + # $grep $opt "$pat" | sed "$sed_script" + # exit ${PIPESTATUS[0]} + # + # Inside the `...`, fd4 goes to the pipe whose other end is read + # and passed to eval; fd1 is the normal standard output + # preserved the line before with exec 3>&1 + exec 3>&1 + eval ` + exec 4>&1 >&3 3>&- + { + $grep $opt "$pat" 4>&-; echo "r=$?;" >&4 + } | sed "$sed_script" + ` + exit $r fi r=$? test $res -lt $r && res=$r