stdout에 아무것도 기록되지 않은 경우에만 stderr를 인쇄하고, 그렇지 않으면 stdout을 인쇄하고 stderr를 버립니다.

stdout에 아무것도 기록되지 않은 경우에만 stderr를 인쇄하고, 그렇지 않으면 stdout을 인쇄하고 stderr를 버립니다.

항상 내용을 stderr로 인쇄하는 명령이 있습니다. 이러한 정보는 표준 출력에 아무 것도 기록되지 않는 한 결코 유용하지 않습니다.

따라서 현재 stdout 출력이 비어 있는 경우에만 이전 stderr 출력이 stderr로 인쇄되도록 명령에서 stdout 및 stderr를 필터링하고 파이프하는 데 도움이 되는 간단한 셸 방법, 도구 또는 명령이 있습니까? 그렇지 않으면(stdout이 비어 있지 않을 때) ) stdout에만 인쇄됩니까?

답변1

이를 임시 파일로 리디렉션하고 표준 출력에 기록된 내용이 있는지 (스크립트에서) 확인할 수 있습니다.

그것은 마치

#!/bin/sh
mytemp=$(mktemp -d)
trap "rm -rf $mytemp" EXIT INT QUIT HUP
"$@" 2>$mytemp/error | tee $mytemp/output
[ -s $mytemp/output ] || cat $mytemp/error

관련 정보