2016-10-27 3 views
-1

Ich bin gerade dabei, ein Werkzeug über ein Bash-Skript zu automatisieren. Das Programm druckt den Prozess in einem sehr hässlichen Format aus und ich möchte es zu einem besseren analysieren (es gibt den Fortschritt als eine ganze Zahl von 0 bis 65535 aus) und einen echten Prozentsatz anzeigen. Das Problem: Das Programm generiert keine Zeilenumbrüche, es wird, denke ich, einfach an den Anfang der Zeile springen und es überschreiben, um nur eine Zeile der Fortschrittsausgabe zu erzeugen.Befehl erzwingen, um Newline zu machen

Was ich damit meine ist, dass der Prozess nicht Zeilenumbrüche so meine Schleife erzeugen:

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

Wont jede Ausgabe als der fehlenden Newline erzeugen.

Gibt es eine Möglichkeit zu erzwingen, dass dies als Newline interpretiert wird?

+0

Was meinst du mit \ b? \ b ist nur b in der Shell-Terminologie.^b wäre das Zeichen \ 001, das übersetzt werden kann. – BenPen

+0

Warum fügst du kein 'echo' nach der' dostuff' Zeile hinzu, um es zu erzeugen? – fedorqui

+0

Bearbeitete die Frage erneut. Es gibt ein Echo im Code, tut mir leid, dass ich das verpasst habe. Das Problem ist, es gibt NIE ein Newline. – Nidhoegger

Antwort

1

Mit Hilfe der Kommentare in der Frage konnte ich das Problem lösen. Die Lösung war für mich Byte für Byte zu lesen und es zusammen auf eine Zeile wie diese anfügen:

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

Sie tr verwenden können, um die Ausgabe zu filtern.

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

Dies hat den Vorteil, dass es auch mit normal formatierten Zeilen einfach zu verwenden ist. Wenn Sie feststellen, dass die Fortschrittsberichterstellung abgeschlossen ist, können Sie die Ausgabe auf andere Weise neu formatieren, indem Sie der While-Schleife Logik hinzufügen.

Verwandte Themen