Bash에서 리디렉션을 중지하는 방법

Bash에서 리디렉션을 중지하는 방법

나는 사용한다:

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

관련 정보