busybox,macOS bash和非bash shell的解决方案接受的答案肯定是bash的最佳选择。我在没有访问bash的Busybox环境中工作,并且它不理解exec > >(tee log.txt)语法。它也无法exec >$PIPE正常工作,尝试创建一个与命名管道同名的普通文件,该文件失败并挂起。希望这对没有bash的其他人有用。此外,对于使用命名管道的任何人来说,它是安全的rm $PIPE,因为它取消了管道与VFS的链接,但使用它的进程仍然保持引用计数,直到它们完成。注意$ *的使用不一定安全。#!/bin/shif [ "$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