當透過管道將 tee 傳輸到 sed 時,initrd 內的 Busybox ASH 出現問題

當透過管道將 tee 傳輸到 sed 時,initrd 內的 Busybox ASH 出現問題

我正在嘗試記錄初始化腳本的早期啟動輸出。這是正在起作用的:

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內的早期啟動init腳本(shell是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當我更改為底部腳本時,根本沒有輸出。該文件完全是空的,但該文件已建立。

我在啟動的系統上本地安裝了 busybox,以測試 ASH 和 busybox 版本的 tee 和 sed,並且我運行了底部變體,它起作用了。但由於某種原因,在啟動期間,底部變體會導致空日誌檔案。

可能出了什麼問題?感覺跟重定向有關係?

答案1

解決了。結果我需要重設switch_root在 stage-1-init.sh 中呼叫之前使用的 stdout 和 stderr 檔案描述符。

相關內容