이 명령은 내 스크립트의 출력을 로그 파일에 저장하지 않습니다.
. 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에 코드를 작성했기 때문일 수 있습니다.