Busybox ASH dentro initrd tem um problema quando tubulação tee para sed

1

Estou tentando registrar a saída de inicialização inicial do script de inicialização. É isso 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 snippet acima é colocado no script de inicialização inicial (shell é busybox ash) dentro do initrd, e a saída é registrada no arquivo /run/log/stage-1-init.log e eu posso vê-lo mais tarde dentro do sistema inicializado, e há conteúdo dentro dele.

No entanto, também estou tentando adicionar um filtro sed 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 em /run/log/stage-1-init.log . O arquivo está completamente vazio, mas o arquivo é criado.

Instalei o busybox localmente no sistema inicializado para testar as versões ASH e busybox do tee e do sed e 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?

    
por CMCDragonkai 18.02.2016 / 09:16

1 resposta

0

Resolveu. Acontece que eu precisava redefinir os descritores de arquivo stdout e stderr que eu usei antes de chamar switch_root no stage-1-init.sh.

    
por 24.02.2016 / 10:14