스크립트 출력 로깅에 이 명령이 작동하는 이유는 무엇입니까?

스크립트 출력 로깅에 이 명령이 작동하는 이유는 무엇입니까?

이 명령은 내 스크립트의 출력을 로그 파일에 저장하지 않습니다.

. myscript.sh | tee -a log_file.log

그러나 다음 명령은하다출력을 로그 파일에 저장합니다.

. myscript.sh 2>&1 | tee -a dash_log.log

두 번째 것은 작동하지만 첫 번째는 작동하지 않는 이유는 무엇입니까? AFAIK의 유일한 차이점은 bash에게 stderr을 stdout으로 리디렉션하도록 지시했으며 stdout에 어떤 영향도 미치지 않아야 한다는 것입니다. 그러나 첫 번째 명령은 표준 출력의 "오류 없는" 버전을 로그 파일에 저장하지도 않습니다.

중요한 경우: AWS에서 호스팅되는 Ubuntu 12.04를 사용하고 있습니다.

편집: 이는 wget이 메시지를 출력하는 방법에 대한 잘못된 가정 때문입니다. 바라보다https://stackoverflow.com/questions/13066518/why-does-wget-output-to-stderr-rather-than-stdout그리고http://www.gnu.org/software/wget/manual/html_node/Logging-and-Input-File-Options.html

답변1

귀하의 스크립트는 출력의 대부분 또는 전부를 stderr에 쓰는 것 같습니다. 이것은 테스트하기 쉽습니다

myscript.sh > std.out
myscript.sh 2> err.out

그런 다음 각 파일의 내용을 검토하고 교육을 받으세요.


의심스럽습니다. 스크립트의 유일한 출력은 wget 호출에서 나옵니다.

의심하지 마세요. 테스트하기 쉽습니다.

$ wget http://serverfault.com >std.out
--2013-09-09 07:06:25--  http://serverfault.com/
Resolving serverfault.com... 198.252.206.16
Connecting to serverfault.com|198.252.206.16|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 51867 (51K) [text/html]
Saving to: “index.html.6”

100%[=================================================>] 51,867   231K/s  in 0.2s

2013-09-09 07:06:26 (231 KB/s) - “index.html.6” saved [51867/51867]

출력이 여전히 터미널에 기록되고 있는 것을 확인하고 시도해 보세요.

 $ wget http://serverfault.com 2>err.out
 $

양자전기역학

wget 명령은 출력을 stdout 대신 stderr에 기록합니다.

답변2

코드를 살펴봐야 할 수도 있지만 이는 stderr에 코드를 작성했기 때문일 수 있습니다.

관련 정보