나에게 파이프가 있다고 가정해보자.
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
이는 두 번째 줄이 에코될 때까지 스크립트가 종료되지 않음을 나타냅니다.