Descritor de arquivo exec do Bash Script que retorna “not found”

1

Eu quero definir toda a saída de depuração para um arquivo de log. Então eu chequei 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

executar:

./test-script

retorna:

exec: 5: not found

O manual mostra que você pode fazer isso também, então por que o acima não está funcionando?

    
por e15purple 29.01.2018 / 16:35

2 respostas

2

O erro leva você até a metade:

exec: 5: not found

exec tentou executar um comando chamado 5 e não o encontrou.

A sintaxe para redirecionar um descritor de arquivo chama não espaço entre o número do descritor de arquivo e o operador de redirecionamento, assim:

exec 5> /var/log/test.log
    
por 29.01.2018 / 16:38
2

Não deve haver espaço entre 5 e > na linha exec .

Com o espaço, o script tenta executar um comando chamado 5 , e é por isso que você "não foi encontrado".

Sem o espaço, você anexa o descritor de arquivo 5 ao nome de arquivo fornecido para a saída.

Além disso, não é necessário exportar a variável BASH_XTRACEFD , basta configurá-la:

#!/bin/bash 

exec 5>test.log   

BASH_XTRACEFD=5

main () {           
    set -x        
    echo hello    
    set +x        
}

main 
    
por 29.01.2018 / 16:38

Tags