대략 다음과 같은 코드가 있습니다.
cat infile | while read line; do
echo 2> 'log ' $line
echo $line
done > outfile
outfile
올바르게 생성되었습니다. 그러나 STDERR 출력은 사라집니다. outfile
위의 마지막 줄을 바꾸면 생성 done > outfile 2> errfile
되지만 errfile
비어 있습니다.
루프 내에서 오류 출력을 캡처할 수 있습니까? 상위 STDERR로 직접 스트리밍하는 것이 좋습니다(위의 내용은 표준 오류 스트림이 다른 프로세스에서 캡처되는 더 큰 스크립트의 일부입니다).
답변1
구문이 잘못되었습니다. 가 아니어야 >&2
합니다 2>
.
답변2
루프 내부에서 stderr 을 리디렉션하기 때문에 예제가 작동하지 않습니다 2>
. 그런 다음 리디렉션하려고 하면다시루프 외부에는 리디렉션할 스트림이 없습니다.
이것이 당신이 정말로하고 싶은 일인 것 같습니다 :
cat infile | while read line; do
echo >&2 'log ' $line
echo $line
done > outfile 2> errfile
이렇게 하면 while 루프 내부의 모든 오류가 예상대로 리디렉션됩니다. 질문의 예와 같이 루프 내에서 오류를 리디렉션하지 않은 한.