티를 sed로 연결할 때 initrd 내부의 Busybox ASH 문제

티를 sed로 연결할 때 initrd 내부의 Busybox ASH 문제

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를 테스트하기 위해 부팅된 시스템에 비지박스를 로컬로 설치했고 하단 변형을 실행했는데 작동했습니다. 그러나 어떤 이유로 하단 변형은 시작 중에 빈 로그 파일을 생성합니다.

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

답변1

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

관련 정보