Desejo definir toda a saída de depuração para um arquivo de log. Então verifiquei a linha de comando - bash: set -x logs to file | Pergunte ao Ubuntu e siga as instruções.
script de teste:
#!/bin/bash
exec 5 >/var/log/test.log
export BASH_XTRACEFD=5
main(){
set -x
echo hello
set +x
}
main
corre:
./test-script
retorna:
exec: 5: not found
O manual mostra que você também pode fazer isso, então por que o acima não está funcionando?
Não deve haver espaço entre
5
e>
naexec
linha.Com o espaço, o script tenta executar um comando chamado
5
, e é por isso que você obtém "não encontrado".Sem o espaço, você anexa o descritor de arquivo 5 ao nome de arquivo fornecido para saída.
Além disso, não há necessidade de exportar a variável
BASH_XTRACEFD
, basta configurá-la:O erro leva você a meio caminho:
exec
tentou executar um comando chamado5
, e não o encontrou.A sintaxe para redirecionar um descritor de arquivo não requer espaço entre o número do descritor de arquivo e o operador de redirecionamento, da seguinte forma: