Busybox ASH dentro de initrd tiene un problema al conectar la T al sed

Busybox ASH dentro de initrd tiene un problema al conectar la T al sed

Estoy intentando registrar el resultado del inicio temprano desde el script de inicio. Esto es lo que está funcionando:

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

El fragmento anterior se coloca en el script de inicio inicial (shell es ash de Busybox) dentro de initrd, y el resultado se registra en un /run/log/stage-1-init.logarchivo y puedo verlo más tarde dentro del sistema iniciado, y hay contenido dentro.

Sin embargo, también estoy intentando agregar un sedfiltro para filtrar líneas vacías:

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

En el momento en que cambio al script inferior, no hay ningún resultado /run/log/stage-1-init.log. El archivo está completamente vacío, pero se crea el archivo.

Instalé Busybox localmente en el sistema iniciado para probar las versiones ASH y Busybox de tee y sed, ejecuté la variante inferior y funcionó. Pero por alguna razón, durante el arranque, la variante inferior genera un archivo de registro vacío.

¿Qué podría estar saliendo mal? ¿Parece que tiene algo que ver con la redirección?

Respuesta1

Resuelto. Resulta que necesitaba restablecer los descriptores de archivos stdout y stderr que usé antes de llamar switch_roota stage-1-init.sh.

información relacionada