3 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
busybox,macOS bash和非bash shell的解決方案
接受的答案肯定是bash的最佳選擇。我在沒(méi)有訪問(wèn)bash的Busybox環(huán)境中工作,并且它不理解exec > >(tee log.txt)語(yǔ)法。它也無(wú)法exec >$PIPE正常工作,嘗試創(chuàng)建一個(gè)與命名管道同名的普通文件,該文件失敗并掛起。
希望這對(duì)沒(méi)有bash的其他人有用。
此外,對(duì)于使用命名管道的任何人來(lái)說(shuō),它是安全的rm $PIPE,因?yàn)樗∠斯艿琅cVFS的鏈接,但使用它的進(jìn)程仍然保持引用計(jì)數(shù),直到它們完成。
注意$ *的使用不一定安全。
#!/bin/sh
if [ "$SELF_LOGGING" != "1" ]
then
# The parent process will enter this branch and set up logging
# Create a named piped for logging the child's output
PIPE=tmp.fifo
mkfifo $PIPE
# Launch the child process with stdout redirected to the named pipe
SELF_LOGGING=1 sh $0 $* >$PIPE &
# Save PID of child process
PID=$!
# Launch tee in a separate process
tee logfile <$PIPE &
# Unlink $PIPE because the parent process no longer needs it
rm $PIPE
# Wait for child process, which is running the rest of this script
wait $PID
# Return the error code from the child process
exit $?
fi
# The rest of the script goes here
添加回答
舉報(bào)