On Sun, May 17, 2015 at 07:44:15PM -0400, Luke Shumaker wrote:
> `grep -q` may exit as soon as it finds a match; the program piped in to it
> might not be finished writing, and consequently print a message about a
> "write error" to stderr.
>
> I'll add that this is not purely hypothetical--it happened to me while
> testing.
The rationale doesn't make sense to me. If the program writing to the
input side of the pipe is the one throwing the error, why should piping
grep's output to /dev/null change this?
> ---
> test/lib/common.inc | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/test/lib/common.inc b/test/lib/common.inc
> index 5b06616..83c54bd 100644
> --- a/test/lib/common.inc
> +++ b/test/lib/common.inc
> @@ -177,7 +177,7 @@ checkAnyPackageDB() {
>
> for db in "${DBEXT}" "${FILESEXT}"; do
> ( [ -r
> "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" ] \
> - && bsdtar -xf
> "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep -q "${pkg}") \
> + && bsdtar -xf
> "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep "${pkg}"
> &>/dev/null) \
> || fail "${pkg} not in
> ${repo}/os/${arch}/${repo}${db%.tar.*}"
> done
> done
> @@ -221,7 +221,7 @@ checkPackageDB() {
>
> for db in "${DBEXT}" "${FILESEXT}"; do
> ( [ -r "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" ] \
> - && bsdtar -xf
> "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep -q "${pkg}") \
> + && bsdtar -xf
> "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep "${pkg}"
> &>/dev/null) \
> || fail "${pkg} not in
> ${repo}/os/${arch}/${repo}${db%.tar.*}"
> done
> }
> @@ -247,7 +247,7 @@ checkRemovedPackageDB() {
>
> for db in "${DBEXT}" "${FILESEXT}"; do
> ( [ -r "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" ] \
> - && bsdtar -xf
> "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep -q
> "${pkgbase}") \
> + && bsdtar -xf
> "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep "${pkgbase}"
> &>/dev/null) \
> && fail "${pkgbase} should not be in
> ${repo}/os/${arch}/${repo}${db%.tar.*}"
> done
> }
> @@ -273,7 +273,7 @@ checkRemovedAnyPackageDB() {
> for db in "${DBEXT}" "${FILESEXT}"; do
> for arch in "${ARCH_BUILD[@]}"; do
> ( [ -r
> "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" ] \
> - && bsdtar -xf
> "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep -q
> "${pkgbase}") \
> + && bsdtar -xf
> "${FTP_BASE}/${repo}/os/${arch}/${repo}${db%.tar.*}" -O | grep "${pkgbase}"
> &>/dev/null) \
> && fail "${pkgbase} should not be in
> ${repo}/os/${arch}/${repo}${db%.tar.*}"
> done
> done
> --
> 2.4.1