Wie lese ich in einem Shellskript ein fifo zeilenweise aus?
Konkret: Untenstehendes Skript brennt Daten in ein iso-Image. Die Ausgabe (stderr) von mkisofs möchte ich später in einen Fortschrittsbalken weiterverarbeiten. Dazu schreibe ich sie in die Pipe und lese sie zeilenweise mit head aus. Leider bricht bei der untenstehenden Konstruktion mkisofs mit "broken pipe" ab. Wenn ich statt des mkisofs eine Schleife mit einfachen echo- und sleep-Befehlen in das Skript schreibe, funktioniert alles. Was ist falsch?
Konkret: Untenstehendes Skript brennt Daten in ein iso-Image. Die Ausgabe (stderr) von mkisofs möchte ich später in einen Fortschrittsbalken weiterverarbeiten. Dazu schreibe ich sie in die Pipe und lese sie zeilenweise mit head aus. Leider bricht bei der untenstehenden Konstruktion mkisofs mit "broken pipe" ab. Wenn ich statt des mkisofs eine Schleife mit einfachen echo- und sleep-Befehlen in das Skript schreibe, funktioniert alles. Was ist falsch?
Code:
#!/bin/sh
printfifo() {
while [ -r fifofile ]; do
LINE=`head -1 fifofile`
echo LINE=$LINE
sleep 0.5
done
}
mkfifo fifofile
printfifo &
mkisofs -gui -graft-points -v -o image.iso $HOME/Dokumente/ > fifofile 2>&1
rm fifofile
sleep 3