파이프라인의 한 단계라도 실패할 경우 파이프라인을 즉시 실패하게 만드는 방법

파이프라인의 한 단계라도 실패할 경우 파이프라인을 즉시 실패하게 만드는 방법

나에게 파이프가 있다고 가정해보자.

reader | processor | writer.

기본적으로 파이프는 리더가 최상의 시나리오 processor에서 writer프로세서로 데이터를 보내려고 시도한 후에만 실패하는 것으로 보입니다.

어떤 단계라도 실패하면 전체 파이프라인이 즉시 실패해야 합니다. set -eo pipefail도움이 안돼.

추악한 해결 방법 없이 이것이 가능합니까? 그것은 자연스러운 일이고 가능한 일인 것 같습니다.

나는 예를 들었다.

==> script <==
#! /usr/bin/env bash

set -eo pipefail

trap "exit 1" ERR

./read | ./process | ./write

==> read <==
#! /usr/bin/env bash

seq 10 |
    while read line; do
        >&2 echo echoing $line
        echo $line
        sleep 2
    done

==> process <==

count=0
while read line; do
    echo processing $line
    count=$((count+1))
    if [[ $count == 1 ]]; then
        >&2 echo exiting...
        exit 1
    fi
done

==> write <==
#! /usr/bin/env bash

while read line; do
    echo $line
done

이것을 실행하면

echoing 1
exiting...
processing 1
echoing 2

이는 두 번째 줄이 에코될 때까지 스크립트가 종료되지 않음을 나타냅니다.

관련 정보