set -x 출력을 캡처하기 위해 bash 스크립트의 일부를 파일로 리디렉션

set -x 출력을 캡처하기 위해 bash 스크립트의 일부를 파일로 리디렉션

bash 스크립트가 있고 set -x를 사용하여 스크립트의 일부를 캡처하고 해당 출력을 파일로 리디렉션하고 싶습니다.

ENVFILE 설정을 볼 수 있지만 인쇄됩니다.

set -x의 출력을 std out 대신 파일로 캡처하는 방법이 있습니까?

#!/bin/sh
...a bunch of stuff....

if [ -e ${ENVFILE} ]; then
set -x
. ${ENVFILE}
set +x
fi # ! -e PROJOB
... a bunch of stuff .... 

답변1

bash를 사용하는 경우 다음을 사용할 수 있습니다.BASH_XTRACEFD:

...
if [ -e ${ENVFILE} ]; then
  BASH_XTRACEFD=3
  set -x
  . ${ENVFILE}
  set +x
  unset BASH_XTRACEFD
fi # ! -e PROJOB
...

그런 다음 다음과 같이 스크립트를 실행하십시오.

/path/to/script 3>/path/to/trace.output

이미 FD 3을 사용하고 있다면 3이 아닌 다른 파일 설명자를 사용하세요.

답변2

난 이걸 할거야. 코드의 주석을 살펴보세요.

#!/bin/sh
...a bunch of stuff....

if [ -e ${ENVFILE} ]; then

#save the file descriptor of the current stderr
exec 3>&2
#redirect to the file
exec 2>/.../you_file

set -x
. ${ENVFILE}
set +x

#restore original redirection
exec 2>&3
#close file descriptor 3
exec 3>&-

fi # ! -e PROJOB
... a bunch of stuff .... 

디버깅 내용 옆에 표준 출력을 리디렉션하려면 를 사용하여 fd 2와 유사한 방식으로 파일 설명자 1을 리디렉션해야 합니다 exec.

관련 정보