
Я пытаюсь зарегистрировать вывод ранней загрузки из скрипта init. Вот что работает:
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
Приведенный выше фрагмент кода помещается в ранний загрузочный скрипт инициализации (оболочка — busybox ash) внутри initrd, а вывод записывается в /run/log/stage-1-init.log
файл, и я могу просмотреть его позже внутри загруженной системы, и внутри есть содержимое.
Однако я также пытаюсь добавить sed
фильтр для фильтрации пустых строк:
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
В тот момент, когда я перехожу на нижний скрипт, вывода вообще нет /run/log/stage-1-init.log
. Файл полностью пустой, но файл создан.
Я установил busybox локально на загруженной системе, чтобы протестировать версии ASH и busybox для tee и sed, и запустил нижний вариант, и он заработал. Но по какой-то причине во время загрузки нижний вариант приводит к пустому файлу журнала.
Что может быть не так? Мне кажется, это как-то связано с перенаправлением?
решение1
Решил. Оказалось, мне нужно было сбросить дескрипторы файлов stdout и stderr, которые я использовал перед вызовом switch_root
stage-1-init.sh.