명령이 실패하면 파이프를 일찍 종료합니다.

명령이 실패하면 파이프를 일찍 종료합니다.

내가 찾고 있어요이전 명령이 실패하면 파이프를 종료합니다.하지만 저는 이 문제에 대한 보다 일반적인 해결책을 찾고 있습니다.

chlist -q -v -m -r $sourcelist | \
grep '^USER:' | \
chlist -q -v -f - $superlist

문제는 첫 번째 chlist가 실패하면 두 번째 chlist에 입력이 없으면 정말 좋지 않다는 것입니다.

첫 번째 chlist의 출력을 임시 파일에 넣은 다음 종료 상태를 확인하는 것(예: 파이프를 전혀 사용하지 않음) 외에 두 번째 chlist가 실행되지 않도록 하는 솔루션이 있습니까?

답변1

파이프라인의 모든 명령은 비동기식으로 시작되므로 마지막 명령이 입력 없이 실행되지 않도록 하려면 제안한 대로 파이프라인을 분할해야 합니다. 아니면 chlist(모르겠어요) 그렇게 할 수 있는 옵션이 있을 수도 있습니다.

답변2

좀 더 실험한 끝에 나는 다음과 같은 아이디어를 생각해 냈는데, 내 생각에는 이것이 실현 가능하고 매우 일반적인 해결책일 수 있습니다.

( rm -f FAIL ; chlist -q -v -m -r $sourcelist || touch FAIL ) | \

( test -e FAIL || chlist -q -v -f - $superlist )

(여기서는 명확성을 위해 grep생략했지만 여기에서는 잘 작동합니다)

또 다른 (깨끗한?) 변형:

( chlist -q -v -m -r $sourcelist || touch FAIL ) | \

( rm FAIL 2>/dev/null || chlist -q -v -f - $superlist )

답변3

첫 번째 명령의 출력에 더미 라인을 추가하여 마지막 명령의 입력 요구 사항을 충족하지만 작업을 트리거하지 않으려면 어떻게 해야 합니까?

관련 정보