Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 24 Feb 2019 21:06:17 +0000
From:      bugzilla-noreply@freebsd.org
To:        bugs@FreeBSD.org
Subject:   [Bug 224270] Get exit status of process that's piped to another: set -o pipefail is missing for /bin/sh
Message-ID:  <bug-224270-227-x9Td98rWib@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-224270-227@https.bugs.freebsd.org/bugzilla/>
References:  <bug-224270-227@https.bugs.freebsd.org/bugzilla/>

next in thread | previous in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D224270

--- Comment #12 from commit-hook@freebsd.org ---
A commit references this bug:

Author: jilles
Date: Sun Feb 24 21:05:16 UTC 2019
New revision: 344502
URL: https://svnweb.freebsd.org/changeset/base/344502

Log:
  sh: Add set -o pipefail

  The pipefail option allows checking the exit status of all commands in a
  pipeline more easily, at a limited cost of complexity in sh itself. It wo=
rks
  similarly to the option in bash, ksh93 and mksh.

  Like ksh93 and unlike bash and mksh, the state of the option is saved whe=
n a
  pipeline is started. Therefore, even in the case of commands like
    A | B &
  a later change of the option does not change the exit status, the same way
    (A | B) &
  works.

  Since SIGPIPE is not handled specially, more work in the script is requir=
ed
  for a proper exit status for pipelines containing commands such as head t=
hat
  may terminate successfully without reading all input. This can be somethi=
ng
  like

  (
          cmd1
          r=3D$?
          if [ "$r" -gt 128 ] && [ "$(kill -l "$r")" =3D PIPE ]; then
                  exit 0
          else
                  exit "$r"
          fi
  ) | head

  PR:           224270
  Relnotes:     yes

Changes:
  head/bin/sh/jobs.c
  head/bin/sh/options.h
  head/bin/sh/sh.1
  head/bin/sh/tests/execution/Makefile
  head/bin/sh/tests/execution/pipefail1.0
  head/bin/sh/tests/execution/pipefail2.42
  head/bin/sh/tests/execution/pipefail3.42
  head/bin/sh/tests/execution/pipefail4.42
  head/bin/sh/tests/execution/pipefail5.42
  head/bin/sh/tests/execution/pipefail6.42
  head/bin/sh/tests/execution/pipefail7.0

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-224270-227-x9Td98rWib>