2016-10-27 3 views
-1

현재 bash 스크립트를 통해 도구를 자동화하고 있습니다. 이 프로그램은 매우 추한 형식으로 프로세스를 출력하고 더 나은 것으로 구문 분석 (0에서 65535 사이의 정수로 진행률을 출력 함)하고 실제 백분율을 표시합니다. 문제 : 프로그램은 줄 바꿈을 생성하지 않습니다. 줄 시작 부분으로 건너 뛰고 한 줄의 진행 출력 만 만들도록 덮어 씁니다.개행 명령 강제 실행

while IFS= read -r line; do 
    parse_output_of_the_line 
    echo "${progress}" 
done < <(process --with-params) 

못해 누락 된 줄 바꿈의 어떠한 출력을 생성 :

는 내가 그 뜻은 공정 내 루프 때문에 줄 바꿈을 생성하지 것입니다.

이것이 개행 문자로 해석 될 수있는 방법이 있습니까?

+0

\ b에 대해 무엇을 의미합니까? \ b는 쉘 용어로 b입니다.^b는 \ 001 인 문자가 될 수 있습니다. – BenPen

+0

'dostuff' 줄 다음에'echo'를 추가하지 않으십시오. – fedorqui

+0

질문을 다시 수정했습니다. 코드에 에코가 있습니다. 미안합니다. 문제는 결코 개행이 없다는 것입니다. – Nidhoegger

답변

1

질문에 대한 의견을 통해 나는 문제를 해결할 수있었습니다. 나를위한 해결책은 바이트 단위로 읽고 다음과 같이 한 줄에 추가하는 것입니다.

linefeed="$(echo -e "\r")" 
temp_line="" 
while IFS= read -rn 1 char; do 
    if [ "${char}" == "${linefeed}" ]; then 
     line="${temp_line}" 
     temp_line="" 

     # DO YOUR STUFF HERE! 

    else 
     temp_line="${temp_line}${char}" 
    fi 
done < <(command --with-params) 
1

출력을 필터링하려면 tr을 사용할 수 있습니다.

while IFS= read -r line; do 
    parse_output_of_the_line 
    echo "${progress}" 
done < <(process --with-params | tr '\r' '\n') 

이렇게하면 일반 형식의 줄에서도 쉽게 사용할 수 있다는 장점이 있습니다. 진행보고가 완료되면 감지하면 while 루프 내부에 논리를 추가하여 출력을 다른 방식으로 다시 포맷 할 수 있습니다.