On Wed, 14 Mar 2018 00:11:12 -0400, Eli Schwartz wrote: > > On 03/13/2018 09:52 PM, Luke Shumaker wrote: > > From: Luke Shumaker <[email protected]> > > > > `grep -q` may exit as soon as it finds a match; this is a good optimization > > for when the input is a file. However, if the input is the output of > > another program, then that other program will receive SIGPIPE, and further > > writes will fail. When this happens, it might (bsdtar does) print a > > message about a "write error" to stderr. Which is going to confuse and > > alarm the user. > > > > In one of the cases, this had already been mitigated by wrapping > > bsdtar in "echo "$(bsdtar ...)", as Bash builtin echo doesn't complain > > if it gets SIGPIPE. However, that means we're storing the entire > > output of bsdtar in memory, which is silly. > > --- > > db-functions | 2 +- > > test/lib/common.bash | 4 ++-- > > 2 files changed, 3 insertions(+), 3 deletions(-) > > > > diff --git a/db-functions b/db-functions > > index 58b753a..ee390ff 100644 > > --- a/db-functions > > +++ b/db-functions > > @@ -303,7 +303,7 @@ check_pkgfile() { > > > > in_array "${pkgarch}" "${ARCHES[@]}" 'any' || return 1 > > > > - if echo "${pkgfile##*/}" | grep -q "^${pkgname}-${pkgver}-${pkgarch}"; > > then > > + if echo "${pkgfile##*/}" | grep "^${pkgname}-${pkgver}-${pkgarch}" > > &>/dev/null; then > > But echo should be fine anyway?
Yeah, in this case it's for consistency with the others. It's easier to remember "don't use `grep -q` on other commands' stdout" that it is to work out when it's ok and when it isn't. > Regardless this could be so much more elegant. > > if [[ $pkgfile = $pkgname-$pkgver-$pkgrel-$arch* ]]; then You're right, that is better. -- Happy hacking, ~ Luke Shumaker
