Commit Graph

1 Commits

Author SHA1 Message Date
Tao Liu
1bcff505ed Use "grep -q <<< $(cmd)" instead of "cmd | grep -q"
Resolves: RHEL-40948
Conflict: Yes, commented the diff code within the patch's commit log,
          otherwise the patch command will regard the diff code as regular
          patch hunk and fail.
Upstream: fedora

commit 98087d78eda2ca58a3b55ee5dd9e0e7bad8467ef
Author: Tao Liu <ltao@redhat.com>
Date:   Tue Jun 25 16:35:16 2024 +1200

    Use "grep -q <<< $(cmd)" instead of "cmd | grep -q"

    The following line of code's exit value should be the exit value of
    grep by default:

        cmd | grep -q

    However it will not always work as expected, a 141 exit code may be
    returned, see the following debug info:

    --- a/usr/lib/dracut/modules.d/99kdumpbase/module-setup.sh
    +++ b/usr/lib/dracut/modules.d/99kdumpbase/module-setup.sh
    @@ -55,6 +55,11 @@ depends() {
             _dep="$_dep ssh-client"
         fi

    +    dracut --list-modules 1>&2
    +    echo $? 1>&2
    +    dracut --list-modules | grep -q lvmthinpool-monitor
    +    echo $? ${PIPESTATUS[0]} ${PIPESTATUS[1]} 1>&2
    +
         if is_lvm2_thinp_dump_target; then
             if dracut --list-modules | grep -q lvmthinpool-monitor; then
                 add_opt_module lvmthinpool-monitor

    $ kdumpctl rebuild
    kdump: Rebuilding /boot/initramfs-6.10.0-0.rc4.11.el10.x86_64kdump.img
    ...snip...
    lvmmerge
    lvmthinpool-monitor
    ..snip...
    uefi-lib
    0
    141 141 0

    The reason is, grep exits immediately when there is a match but the
    first cmd still keep writing to the pipe. Since there is no reader,
    a SIGPIPE signal is generated. As a result, a 141 exit code will be
    returned.

    Let's use the following line of code instead, which have the same effect
    but works as expected:

        grep -q <<< $(cmd)

    Signed-off-by: Tao Liu <ltao@redhat.com>

Signed-off-by: Tao Liu <ltao@redhat.com>
2024-06-28 15:15:14 +12:00