bash에서 호출 foo
하면 stdout에서 해당 명령의 출력이 표시됩니다.
호출 foo > output
하면 해당 명령의 출력이 지정된 파일 (이 경우 ‘output’)로 리디렉션됩니다.
리디렉션 출력 할 수있는 방법은 파일에 있는가 와 는 표준 출력에 표시 한?
답변
원하는 명령의 이름은 tee
다음과 같습니다.
foo | tee output.file
예를 들어 stdout에만 관심이있는 경우 :
ls -a | tee output.file
stderr을 포함 시키려면 다음을 수행하십시오.
program [arguments...] 2>&1 | tee outfile
2>&1
채널 2 (stderr / standard error)를 채널 1 (stdout / standard output)로 리디렉션하여 둘 다 stdout으로 작성됩니다. 또한 tee
명령 으로 지정된 출력 파일로 보내집니다 .
또한 로그 파일 에 추가 하려면 다음 tee -a
과 같이 사용하십시오 .
program [arguments...] 2>&1 | tee -a outfile
답변
$ program [arguments...] 2>&1 | tee outfile
2>&1
stderr 및 stdout 스트림을 덤프합니다.
tee outfile
스트림을 가져 와서 화면과 “outfile”파일에 씁니다.
이것은 아마도 대부분의 사람들이 찾고있는 것입니다. 아마도 일부 프로그램이나 스크립트가 오랫동안 열심히 일하고 많은 결과를 낳을 수 있습니다. 사용자는 정기적으로 진행 상태를 확인하고 출력을 파일에 기록하려고합니다.
문제는 (특히 stdout과 stderr 스트림을 혼합 할 때) 프로그램에 의해 플러시되는 스트림에 의존한다는 것입니다. 예를 들어 stdout에 대한 모든 쓰기가 플러시 되지 않지만 stderr에 대한 모든 쓰기 가 플러시되면 출력 파일 및 화면에서 시간 순서대로 종료됩니다.
프로그램이 진행 상황을보고하기 위해 몇 분마다 한두 줄만 출력하면 나쁘다. 이 경우 프로그램에서 출력을 플러시하지 않으면 몇 시간 동안 파이프를 통해 출력되는 것이 없기 때문에 사용자는 몇 시간 동안 화면에서 출력을 볼 수도 없습니다.
업데이트 : 패키지의 unbuffer
일부인 프로그램 expect
이 버퍼링 문제를 해결합니다. 이로 인해 stdout과 stderr이 화면과 파일에 즉시 기록되어 결합 및 리디렉션 될 때 동기화됩니다 tee
. 예 :
$ unbuffer program [arguments...] 2>&1 | tee outfile
답변
나를 위해 일하는 또 다른 방법은
<command> |& tee <outputFile>
gnu bash 매뉴얼에 표시된대로
예:
ls |& tee files.txt
‘| &’를 사용하면 표준 출력 외에도 command1의 표준 오류 가 파이프를 통해 command2의 표준 입력에 연결됩니다. 그것은됩니다 2> & 1 나타내는 표현 |. 표준 오류를 표준 출력으로 암시 적으로 재지 정하는 것은 명령으로 지정된 재 지정 후에 수행됩니다.
자세한 내용은 리디렉션을 참조하십시오.
답변
주로 Zoredache 솔루션을 사용할 수 있지만 출력 파일을 덮어 쓰지 않으려면 다음과 같이 -a 옵션을 사용하여 tee를 작성해야합니다.
ls -lR / | tee -a output.file
답변
추가해야 할 것 …
패키지 언 버퍼는 fedora 및 redhat unix 릴리스에서 일부 패키지에 대한 문제를 지원합니다.
문제 해결
다음은 나를 위해 일했습니다.
bash myscript.sh 2>&1 | tee output.log
답변
사용 tail -f output
이 작동합니다.
답변
이 유스 케이스 이후의 보너스 답변으로 나를 여기로 데려 왔습니다.
다른 사용자로이 작업을 수행해야하는 경우
echo "some output" | sudo -u some_user tee /some/path/some_file
에코는 사용자와 함께 발생하며 파일 쓰기는 “some_user”로 발생 합니다. 에코를 “some_user”로 실행하고 >> “some_file”로 출력을 리디렉션하는 경우 파일 리디렉션이 발생하는 경우 작동 하지 않습니다. 당신처럼.
힌트 : tee는 -a 플래그와 함께 append를 지원합니다. 파일에서 다른 사용자로 줄을 바꾸어야하는 경우 sed를 원하는 사용자로 실행할 수 있습니다.