이 bash 스크립트 줄은 무엇을 합니까? [복사]

이 bash 스크립트 줄은 무엇을 합니까? [복사]
nohup tensorflow_model_server \
  --rest_api_port=8501 \
  --model_name=fashion_model \
  --model_base_path="${MODEL_DIR}" >server.log 2>&1

텐서플로우 서빙 가이드에서 본 내용입니다.여기. 의미를 알고 싶습니다 > server.log 2>&1. 나는 이것이 stdout파일에 저장한 다음 다른 파일에 저장하는 것에 관한 것이라는 것을 알고 있습니다. stderr그것이 무엇인지 모르겠습니다.

답변1

이 리디렉션의 목적은 다음과 같습니다.반품stderr출력을 서버 로그에 기록합니다 .

이렇게 리디렉션을 사용하면

some command > file.txt

프로그램이 작성한 출력을 stdout일반적으로 콘솔에 연결된 표준 출력 스트림에만 저장합니다.

그러나 대부분의 프로그램은 오류 메시지를 다른 출력 스트림에 기록하는 모범 사례를 따르며 stderr이러한 오류 메시지는 콘솔에도 인쇄되지만 오류 메시지가 "상세"하지 않도록 개별적으로 "잡아서" 리디렉션할 수 있습니다. 프로그램의 정상적인 출력.

그러나 이는 문제가 될 수도 있습니다. 일부 긴(따라서 종종 무인) 컴파일 프로세스의 "정상" 출력을 파일로 리디렉션하는 경우 경고 및 오류가 콘솔에 인쇄됩니다. 이제 나중에 다시 결과를 확인하면 로그 파일에 표준 "모든 것이 정상입니다" 출력이 표시되고 콘솔에는 겉보기에 관련 없는 오류 출력이 표시됩니다.

따라서 모든 메시지가 "컨텍스트에" 있도록 오류 출력을 파일로 "리디렉션"하는 것이 도움이 될 것입니다.

여기서의 메커니즘은

  • 먼저 stdout파일로 리디렉션합니다. ( 이 부분은 스트림의 파일 설명자를 나타내는 로 command > file명시적으로 작성할 수 있습니다 .)command 1>file1stdout

  • stderr또한 "병합된" 방식으로 리디렉션 stdout(이것이 구문이 파일 설명자를 "복사"한다는 의미)인 이유이며, 파일로 리디렉션되는 것으로 알려져 2>&1있습니다 .&stdout

더 읽어보기 좋은 곳은 다음과 같습니다.

관련 정보