Bourne 쉘 스크립트의 모든 출력을 어딘가로 리디렉션 할 수 있습니까?하지만 스크립트 자체 내에 쉘 명령이 있습니까?
단일 명령의 출력을 리디렉션하는 것은 쉽지만 다음과 같은 것을 원합니다.
#!/bin/sh
if [ ! -t 0 ]; then
# redirect all of my output to a file here
fi
# rest of script...
의미 : 스크립트가 비 대화식으로 실행되는 경우 (예 : cron) 모든 파일의 출력을 파일로 저장하십시오. 쉘에서 대화식으로 실행하는 경우 평소와 같이 출력이 stdout으로 이동하십시오.
FreeBSD 주기적 유틸리티가 일반적으로 실행하는 스크립트에 대해이 작업을 수행하려고합니다. 매일 실행되는 이메일의 일부로 매일 보지 않아도되므로 발송하지 않습니다. 그러나이 하나의 특정 스크립트 내에서 무언가 실패하면 나에게 중요하며 일상적인 작업 의이 부분의 출력을 캡처하고 이메일로 보내려고합니다.
업데이트 : Joshua의 대답은 현장에 있지만, 전체 스크립트 주위에 stdout 및 stderr을 저장하고 복원하고 싶었습니다.
# save stdout and stderr to file descriptors 3 and 4, then redirect them to "foo"
exec 3>&1 4>&2 >foo 2>&1
# ...
# restore stdout and stderr
exec 1>&3 2>&4
exec 1>&3 2>&4 3>&- 4>&-