Gerando um arquivo de log por iteração de um loop (bash)?

1
Digamos que eu tenha um loop no terminal que criou um conjunto de diretórios, executei um conjunto de tarefas e queria que cada família de comandos fosse gravada em arquivos de log em um novo diretório. Isso pode ser alcançado de algumas maneiras (usando echo / indo com python), mas eu queria saber existe alguma maneira fácil de passar facilmente um comando na frente do meu loop que só irá criar automaticamente um arquivo de log no novo diretório dos comandos que o loop executa. EDIT: Por um arquivo de log aqui eu quero apenas coletar os comandos finais que são passados para o terminal.

Parte da motivação para isso é que eu vou gerar aleatoriamente flutuações nos parâmetros que eu passo em meus comandos, e seria muito para ser apenas como "sinalizar os seguintes comandos neste loop para logging" vs ter que atribuir valores de variáveis e, em seguida, ecoá-los. Aprender se existe uma espécie de comando "log" seria útil em muitos outros cenários, por isso prefiro respostas para esse efeito.

    
por user507974 09.11.2015 / 22:28

1 resposta

1

Faça os comandos importantes em um grupo e redirecione a saída do grupo:

for dir in dir1 dir2 ...; do
    logfile="$dir"/log.log       # or whatever name you want
    {
         : create a set of directories
         : perform a set of tasks
    } > "$logfile"
done

Se você quiser também a saída no terminal, altere o redirecionamento para um canal para tee

    } | tee "$logfile"
    
por 09.11.2015 / 22:57

Tags