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
.