2013-10-01 2 views

답변

3

당신은 같은 것을 수행 할 수 있습니다

echo "a" | grep "b" | sed 's/a/c/g' 
echo $? 

set -o pipefail 
echo "a" | grep "b" | sed 's/a/c/g' 
echo $? 

그것은 인쇄 : pipefail이 설정된 후

0 
1 
는 전체 종료 코드 종료 코드 (실패)가 반환 사이 1grep입니다

정도 1. 따라서 pipefail은 파이프에서 명령의 마지막 0이 아닌 종료 코드를 반환하기 때문에 작동합니다.

0

파이프 파열을 시뮬레이트하려면 파이프 라인에있는 프로세스 중 하나가 0이 아닌 값으로 종료되어야합니다. 이는 일반적으로 어떤 종류의 실패를 의미합니다. More about pipelines. 예, 프로세스에 SIGKILL 또는 SIGINT 신호를 보내면 0보다 높은 종료 코드 인 at least on Linux it does so가 종료됩니다.

1

그런 트랩은 어떻게 구현됩니까?

당신이 trapsigspec해야한다 무엇을 궁금해하는 것 같다. pipefail을 사용하는 경우

는 파이프 라인의 반환 상태 0이 아닌 상태로 종료 마지막 (가장 오른쪽) 명령의 값, 또는 제로 성공적으로 모든 명령이 종료하면.

ERR을 트랩하려고합니다.

예 :

set -u 
set -o pipefail 

trap 'echo pipefail' ERR 

false | true 
관련 문제