나는 사용한다:
exec >script.log 2>&1
모든 출력을 내 스크립트의 파일로 리디렉션합니다. 스크립트가 끝나면 화면에 메시지를 인쇄하고 싶습니다. 리디렉션을 중지하는 방법은 무엇입니까?
답변1
exec
다시 호출하여 원래 설명자를 복원할 수 있습니다. 어딘가에 저장해야 합니다.
exec 3>&1 4>&2 1>script.log 2>&1
… logged portion …
exec 1>&3 2>&4
echo >&2 "Done"
기록된 섹션 내에서 추가 설명자로 리디렉션하여 명령의 원래 설명자를 사용할 수 있습니다.
echo "30 seconds remaining" >&3
또는 스크립트의 로깅 부분을 복합 명령에 넣고 복합 명령을 리디렉션할 수 있습니다. 리디렉션 섹션 내부의 일부 트랩에서 원래 설명자를 사용하려는 경우 이 방법은 작동하지 않습니다.
{
… logged portion …
} >script.log 2>&1
echo >&2 "Done"
답변2
stdout 및 stderr에 추가 fd 3 및 4를 사용하고 스크립트 끝에서 1과 2를 해당 항목으로 리디렉션합니다.
exec 3>&1 4>&2
exec >script.log 2>&1
echo "Some code"
exec >&3 2>&4
echo "Done"
답변3
먼저 tty가 있는지 확인해야 합니다.
if tty -s; then
echo "Hello, World" > $(tty)
fi