Busybox ASH innerhalb von initrd hat ein Problem beim Weiterleiten von Tee an Sed

Busybox ASH innerhalb von initrd hat ein Problem beim Weiterleiten von Tee an Sed

Ich versuche, die frühen Boot-Ausgaben des Init-Skripts zu protokollieren. Folgendes funktioniert:

mkdir -p /run/log && \
mkdir -p /tmp && \
mkfifo /tmp/stage-1-init.log.fifo1 && \
mkfifo /tmp/stage-1-init.log.fifo2

tee -i < /tmp/stage-1-init.log.fifo1 /run/log/stage-1-init.log &
exec > /tmp/stage-1-init.log.fifo1 2>&1

Der obige Codeausschnitt wird in das frühe Boot-Init-Skript (Shell ist Busybox Ash) innerhalb von initrd eingefügt und die Ausgabe wird in einer /run/log/stage-1-init.logDatei protokolliert, sodass ich sie später im gebooteten System ansehen kann und sie Inhalt enthält.

Ich versuche jedoch auch, einen sedFilter hinzuzufügen, um leere Zeilen herauszufiltern:

mkdir -p /run/log && \
mkdir -p /tmp && \
mkfifo /tmp/stage-1-init.log.fifo1 && \
mkfifo /tmp/stage-1-init.log.fifo2

tee -i < /tmp/stage-1-init.log.fifo1 /tmp/stage-1-init.log.fifo2 &
sed '/^$/d' < /tmp/stage-1-init.log.fifo2 > /run/log/stage-1-init.log &
exec > /tmp/stage-1-init.log.fifo1 2>&1

Sobald ich zum untersten Skript wechsle, erfolgt überhaupt keine Ausgabe /run/log/stage-1-init.log. Die Datei ist komplett leer, aber die Datei wird erstellt.

Ich habe busybox lokal auf dem gebooteten System installiert, um die ASH- und Busybox-Versionen von tee und sed zu testen. Ich habe die unterste Variante ausgeführt und es hat funktioniert. Aber aus irgendeinem Grund führt die unterste Variante beim Booten zu einer leeren Protokolldatei.

Was könnte schief laufen? Es fühlt sich an, als hätte es etwas mit der Umleitung zu tun?

Antwort1

Gelöst. Es stellte sich heraus, dass ich die stdout- und stderr-Dateideskriptoren zurücksetzen musste, die ich vor dem Aufruf switch_rootvon stage-1-init.sh verwendet hatte.

verwandte Informationen