항상 내용을 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