initrd 내부의 Busybox ASH에 tee를 sed로 연결할 때 문제가 있습니다.

initrd 내부의 Busybox ASH에 tee를 sed로 연결할 때 문제가 있습니다.

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

위 스니펫은 initrd 내부의 초기 부팅 초기화 스크립트(셸은 busybox ash)에 배치되고 출력은 /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전혀 없습니다. 파일이 완전히 비어 있지만 파일이 생성됩니다.

ASH와 tee 및 sed의 busybox 버전을 테스트하기 위해 부팅된 시스템에 로컬로 busybox를 설치했고 하단 변형을 실행했는데 작동했습니다. 그러나 어떤 이유로 부팅하는 동안 하단 변형으로 인해 빈 로그 파일이 생성됩니다.

무엇이 잘못될 수 있나요? 리디렉션과 관련이 있는 것 같나요?

답변1

해결했습니다. 알고 보니 switch_rootstage-1-init.sh를 호출하기 전에 사용했던 stdout 및 stderr 파일 설명자를 재설정해야 했습니다 .

관련 정보