[linux] 출력을 파일 및 표준 출력으로 리디렉션하는 방법


3 Answers

$ program [arguments...] 2>&1 | tee outfile

2>&1 은 stderr 및 stdout 스트림을 덤프합니다. tee outfile 은 스트림을 가져 와서 화면과 "outfile"파일에 씁니다.

이것은 아마 대부분의 사람들이 찾고있는 것일 것입니다. 프로그램이나 스크립트가 오랫동안 열심히 일하고 많은 산출물을 산출하는 경우가 있습니다. 사용자는 진행 상황을 주기적으로 확인하려고하지만 출력을 파일에 기록하려고합니다.

문제는 (특히 stdout 및 stderr 스트림을 혼합 할 때) 프로그램에서 플러시되는 스트림에 의존한다는 것입니다. 예를 들어, stdout에 대한 모든 쓰기가 플러시 되지 않았지만 stderr에 대한 모든 쓰기 플러시되면 출력 파일과 화면의 시간 순서대로 종료됩니다.

진행 상황을보고하기 위해 프로그램이 1 ~ 2 분마다 1 ~ 2 분 정도 밖에 출력하지 않으면 나쁘다. 이 경우 출력이 프로그램에 의해 플러시되지 않으면 몇 시간 동안 아무 것도 출력되지 않기 때문에 사용자는 몇 시간 동안 화면에 아무런 출력도 보지 못합니다.

업데이트 : expect 패키지의 일부인 프로그램 unbuffer )가 버퍼링 문제를 해결합니다. 이렇게하면 stdout과 stderr이 화면과 파일에 즉시 쓰고 결합되어 tee 리디렉션 될 때 동기화됩니다. 예 :

$ unbuffer program [arguments...] 2>&1 | tee outfile
Question

bash에서 foo 호출하면 해당 명령의 출력이 표준 출력에 표시됩니다.

foo > output 호출하면 해당 명령의 출력이 지정된 파일 (이 경우 'output')로 리디렉션됩니다.

출력을 파일로 리디렉션하여 표준 출력에 표시하는 방법이 있습니까?




당신은 주로 solution 사용할 수 있지만 출력 파일을 덮어 쓰지 않으려면 다음과 같이 -a 옵션을 사용하여 tee를 작성해야합니다.

ls -lR / | tee -a output.file



< command > |& tee filename # 명령 상태가 내용 인 "filename"파일을 만듭니다. 파일이 이미 존재하면 존재하는 내용을 제거하고 명령 상태를 씁니다.

< command > | tee >> filename < command > | tee >> filename #이 명령은 파일에 상태를 추가하지만 standard_output (화면)에 명령 상태를 인쇄하지 않습니다.

화면에 "echo"를 사용하여 프린트하고 파일에 에코 된 데이터를 추가하고 싶습니다.

echo "hi there, Have to print this on screen and append to a file" 



추가 할 항목 ...

패키지 언 버퍼 (unbuffer)는 fedora 및 redhat unix 릴리스에서 일부 패키지에 대한 지원 문제가 있습니다.

문제를 치워 버림

나를 위해 일한 다음

bash myscript.sh 2>&1 | tee output.log

& 감사합니다. 많은 시간을 절약 해 .




Related