Busybox ASH dentro do initrd tem um problema ao canalizar tee para sed

Busybox ASH dentro do initrd tem um problema ao canalizar tee para sed

Estou tentando registrar a saída de inicialização inicial do script de inicialização. Isto é o 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

O trecho acima é colocado no script de inicialização inicial (shell é busybox ash) dentro do initrd, e a saída é registrada no /run/log/stage-1-init.logarquivo e posso visualizá-la posteriormente dentro do sistema inicializado, e há conteúdo dentro.

No entanto, também estou tentando adicionar um sedfiltro para filtrar linhas vazias:

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

No momento em que mudo para o script inferior, não há saída /run/log/stage-1-init.logalguma. O arquivo está completamente vazio, mas o arquivo foi criado.

Instalei o busybox localmente no sistema inicializado para testar as versões ASH e busybox de tee e sed, executei a variante inferior e funcionou. Mas, por algum motivo, durante a inicialização, a variante inferior resulta em um arquivo de log vazio.

O que poderia dar errado? Parece que tem algo a ver com o redirecionamento?

Responder1

Resolvi-o. Acontece que eu precisava redefinir os descritores de arquivo stdout e stderr que usei antes de chamar switch_rooto stage-1-init.sh.

informação relacionada