2014-05-21 2 views
1

터미널에 진행률 표시 줄을 보여주는 실행 파일이 있습니다. 난 번째 ebelow 방식으로 출력을 파일로 재지시실행 파일 진행률 막대를 로그 파일로 리디렉션

아래 명령이 단말 아웃

Progress [====================================>       ] 58% 

을 넣고

usr/bin/exec >> log.txt 

스크립트 파일 그러나 log.txt에 외모에 포함 이 TERMI에 도시 된 바와 같이 제가 동일한 방식으로 출력을 리디렉션 할이

Progress [=>       ] 0 
Progress [====>       ] 5 
Progress [========>       ] 10 

같은 몇 가지 아니다.

+2

하지만 마지막 줄에는 '진행률 [===== ... ===] 100 %'이 표시됩니다. 너는 그걸 할 수는 있어도, 그 점은 보이지 않는다. – fedorqui

+0

그래, 괜찮아요.하지만 실행 파일이 50에서 멈춘다면 50을 표시해야합니다. rit – user2598064

+0

'usr/bin/exec> log.txt'는 단지 덮어 씌울 것입니다. 지금은 –

답변

0

이 같은 진행률 표시 줄이 일반적으로 이루어집니다

방법이 현재 진행 업데이트를 출력하는 것입니다 ...이 진행 바 프로그램이 일을 정확히 알지 못하고 확신이 대답 할 수있는 방법은 없습니다 만, 그러나 다음 라인의 끝에서 ascii CR (캐리지 리턴)을 없이 넣고 LF (줄 바꿈)없이. 그러면 커서를 다음 줄로 이동하지 않고 표시 커서를 줄의 시작 부분으로 재설정하여 각 후속 진행 업데이트가 이전 줄을 덮어 씁니다. 따라서 파일로 리디렉션하는 경우 파일의 내용이 동일하게 유지됩니다.

vi로 이러한 파일을 보려면 "^ M"으로 표시된 포함 된 CR을 실제로 볼 수 있습니다 (단, LF 문자는 단순히 줄의 끝으로 해석되며 실제로는 표시됨). 다른 편집기로 파일을 보면 CR 문자를 유효한 행 끝 표시기로 해석하고 각 행을 LF 문자가 있거나없는 별도의 행으로 표시 할 수 있습니다.

당신은 log.txt 파일을 어떻게 표시하고 있는지 말하지 않습니다. 프로그램에서 내장 CR 방법을 사용하고 있다면 "cat log.txt"를 사용하면 대화식 사용과 동일한 출력이 표시됩니다. 즉, 각 진행 업데이트 "줄"이 이전의 파일을 덮어 씁니다. 하나는 끝 부분에 표시됩니다.

진행률 표시 줄을 출력하는 프로그램이 터미널 장치에 표시되는지 여부에 민감 할 수도 있습니다. 즉, isatty()를 호출하고 그에 따라 출력을 수정 중일 수 있습니다.

실제 이진 콘텐츠를 확인하기 위해 최종 log.txt에 파일에이 명령을 실행하는 데 유익 수 있습니다 : "0 D"로 표시됩니다

od -tx1z log.txt 

CR (일명^M을). LF (aka^J)가 0a로 표시됩니다.

1

A related answer on a different sitecol 명령을 제안합니다.

usr/bin/exec | col -b >> log.txt 

이 억제 덮어 문자 동안 파일의 내용을 보려면 :

col -b < log.txt | less 

귀하의 진행 표시 줄은 아마에 의해 작동

파일에 쓰기 전에 표준 출력에 덮어 출력을 억제하려면 캐리지 리턴을 사용하여 현재 행을 겹쳐 써야 함을 알립니다. col 유틸리티는 각 위치의 마지막 문자 만 인쇄 할 수 있도록 출력을 버퍼링합니다.

관련 문제