나는 다소 "시끄러운" 스크립트를 가지고 있습니다. 스크립트 출력의 대부분이 로그 파일에 들어가고 사용자는 시작 메시지와 스크립트 끝의 메시지만 볼 수 있도록 출력을 정리하라는 요청을 받았습니다. 이를 위해 다음과 같이 exec를 사용합니다.
#! /bin/bash
echo "Welcome! set up has begun, this may take a few moments..."
exec 3>&1 4>&2 1>> script.log 2>&1
# Call a bunch of other programs - stderr and stdout must
# be written to a log file to diagnose programs, but nothing out the console...
exec 1>&3 2>&4
echo "Your system is ready to use!"
그러나 이 스크립트의 로깅 부분에 있는 프로그램 중 하나가 실패하여(이러한 프로그램에 대한 제어 권한이 별로 없음) 메인 스크립트가 실패하게 되면 어떻게 될지 걱정됩니다. 이 줄이 exec 1>&3 2>&4
실행되지 않으면 사용자가 stderr 및 stdout 리디렉션으로 인해 터미널을 사용할 수 없게 될 수 있습니다! 이 문제를 처리하는 더 안전한 방법이 있습니까?
답변1
스크립트가 별도의 프로그램으로 실행되는 경우 모든 리디렉션은 프로세스가 끝난 후에도 유지되지 않습니다. /bin/bash yourscript.sh
사용자가 실행 중인 대화형 셸에는 적용되지 않고 암시적으로만 적용됩니다. 이것은 정상입니다. 문제를 일으킬 수 있는 유일한 방법은 source yourscript.sh
일반적으로 수행해서는 안 되는 또는 이와 유사한 를 사용하여 스크립트를 읽는 것입니다 .