Redireciona uma parte de um script bash para um arquivo para capturar a saída set -x

4

Eu tenho um script bash e quero capturar uma parte do script com um set -x e redirecionar essa saída para um arquivo.

Eu posso ver o que o ENVFILE está configurando, mas vai sair.

Existe uma maneira de capturar a saída do set -x em um arquivo em vez de std out?

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

if [ -e ${ENVFILE} ]; then
set -x
. ${ENVFILE}
set +x
fi # ! -e PROJOB
... a bunch of stuff .... 
    
por Shar Hunter 07.10.2016 / 18:42

2 respostas

2

Se você estiver usando o bash, use BASH_XTRACEFD :

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

Em seguida, execute o script da seguinte forma:

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

Use um descritor de arquivo diferente de 3 se você já estiver usando o FD 3.

    
por 07.10.2016 / 18:53
0

Eu faria assim. Veja os comentários no código.

#!/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 .... 

Se você quiser que a saída padrão seja redirecionada ao lado do material de depuração, será necessário redirecionar o descritor de arquivo 1 de maneira semelhante ao fd 2 usando exec .

    
por 07.10.2016 / 18:50

Tags