Exit when one process in pipe fails

后端 未结 2 428
失恋的感觉
失恋的感觉 2020-11-29 06:31

The goal was to make a simple unintrusive wrapper that traces stdin and stdout to stderr:

#!/bin/bash

tee /dev/stderr | ./script.sh | tee /dev/stderr

exit          


        
2条回答
  •  爱一瞬间的悲伤
    2020-11-29 07:08

    I think that you're looking for the pipefail option. From the bash man page:

    pipefail

    If set, the return value of a pipeline is the value of the last (rightmost) command to exit with a non-zero status, or zero if all commands in the pipeline exit successfully. This option is disabled by default.

    So if you start your wrapper script with

    #!/bin/bash
    
    set -e
    set -o pipefail
    

    Then the wrapper will exit when any error occurs (set -e) and will set the status of the pipeline in the way that you want.

提交回复
热议问题