2017-09-25 3 views
1

터미널에서 중간 결과를 출력하고 항상 해당 줄을 다시 쓰는 이진 프로그램이 있습니다. 내부적으로는 아마도 system("echo -e '\rsome_useful_number')과 같은 것을 사용할 것입니다. CR 만 사용하면 줄 바꿈 문자가 누락됩니다.

은 내가 스크립트의 일부로 ./program | tee log.txt, ./program>log.txt 등을 실행할 때 내가 얻을 것은 그냥 data 1, data 2, data 3, ... :

그래서 내가보고 기록 할 것 (순차적으로)입니다 last_result.

누락 된 줄 바꿈 문자를 "삽입"하려면 스크립트를 어떻게 적용 할 수 있습니까?

+1

다음과 같이 할 수 있습니다.'./program | tr '\ r "'\ n'' – anubhava

답변

0

CR은 "현재 줄의 처음으로 돌아 가기"를 의미합니다. 따라서 다음 줄이 이전 줄을 덮어 쓰고 있습니다. 즉 모든 줄이 있지만 마지막 줄만 보입니다.

less log.txt 대신 cat log.txt의를 실행하면 당신에게 같은 것을 표시해야합니다 : @anubhava 말했듯이

first_line^Mnext_line^Mlast_line 

을 : ./program | tr '\r' '\n' | tee log.txt 또는 ./program | tr '\r' '\n' >log.txt 파일에 쓰기 전에이 문제를 해결, 아니면 그냥 파일을 볼 수 cat log.txt | tr '\r' '\n'을 사용합니다.

PS :

프로그램 출력은 표준 에러를 stderr에 먼저 표준 출력에 추가 할 수 있습니다 :

사실 당신은 UUoC -Award :

업데이트를 방지하기 위해 tr '\r' '\n' < log.txt를 사용한다

./program 2>&1 | tr '\r' '\n' | tee log.txt 

마지막으로 콘솔의 stderr에 원본 CR 출력을 유지하려는 경우 :

./program 2>&1 | tee /dev/stderr | tr '\r' '\n' > log.txt 
+0

내 프로그램이 stderr로 출력되고 stdout으로 출력되지 않았으므로 솔루션이 제대로 작동하지 않았습니다. 감사. – Gab

관련 문제