busybox, macOS bash 및 비 -bash 쉘을위한 솔루션
수락 된 답변은 bash에 가장 적합한 선택입니다. bash에 액세스하지 않고 Busybox 환경에서 작업하고 있으며 exec > >(tee log.txt)
구문을 이해하지 못합니다 . 또한하지 않습니다exec >$PIPE
명명 된 파이프와 동일한 이름을 가진 일반 파일을 만들려고 시도하여 제대로 작동 실패하고 중단됩니다.
바라건대 이것은 bash가없는 다른 사람에게 유용 할 것입니다.
또한 명명 된 파이프를 사용하는 사람 rm $PIPE
은 VFS에서 파이프를 연결 해제하기 때문에 안전 하지만 파이프를 사용하는 프로세스는 완료 될 때까지 참조 카운트를 유지합니다.
$ *의 사용이 반드시 안전한 것은 아닙니다.
#!/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