![종료 값을 잃지 않고 ts 사용 [중복]](https://linux55.com/image/165835/%EC%A2%85%EB%A3%8C%20%EA%B0%92%EC%9D%84%20%EC%9E%83%EC%A7%80%20%EC%95%8A%EA%B3%A0%20ts%20%EC%82%AC%EC%9A%A9%20%5B%EC%A4%91%EB%B3%B5%5D.png)
다음과 같이 많은 출력을 생성하는 긴 명령을 실행하는 빌드 스크립트가 있습니다.
./compile
ts
컴파일 성능 문제를 해결하기 위해 다음을 사용하고 싶습니다 .더 많은 유틸리티) 각 출력 행 앞에 타임스탬프가 붙습니다. 그래서 스크립트를 다음과 같이 업데이트했습니다.
bash -c "./compile | ts '[%Y-%m-%d %H:%M:%S]'"
이것은 작동하지만 이제 종료 값은 항상 실패 0
시 이벤트 입니다( 종료할 때 오류가 없기 compile
때문에 ).ts
compile
사용 시 종료 코드를 반환하도록 스크립트를 어떻게 업데이트합니까 ts
?
답변1
Bash를 사용하고 있으므로 $PIPESTATUS
파이프라인의 명령에 대한 다양한 종료 코드가 포함된 배열인 이것을 사용할 수 있습니다.
bash -c './compile | ts "[%Y-%m-%d %H:%M:%S]"; exit "${PIPESTATUS[0]}"'
zsh
비슷한 기능이 있지만 $pipestatus
대신 배열을 사용합니다( 대신 zsh
배열에 번호가 매겨져 있다는 점을 기억하세요 ).1
0
답변2
, , 및 busybox를 포함한 pipefail
일부 셸 지원 옵션을 사용할 수 있습니다 (뿐만 아니라bash
ksh93
zsh
mksh
yash
ash
sh
POSIX 사양의 다음 주요 버전에 추가될 예정입니다.) 파이프라인의 종료 상태가 맨 오른쪽에 있는 실패한 명령의 종료 상태가 되도록 합니다.
예를 들어, 종료 상태는 (exit 3) | (exit 4) | (exit 0)
입니다 4
.
bash -o pipefail -c "./compile | ts '[%Y-%m-%d %H:%M:%S]'"
./compile
자체적으로 실패 하지 않는 한 ts
종료 상태로 반환됩니다 .