Como fazer um bash gravar em trace.log, trace1.log, etc.?

Como fazer um bash gravar em trace.log, trace1.log, etc.?

Estou fazendo um script e gostaria de gravá-lo em outro arquivo, se existir?

traceroute google.com > trace.log

Qualquer ajuda seria apreciada.
Além disso, sou um novato, então um exemplo seria útil.
Obrigado.

Responder1

Aqui está uma abordagem:

#!/bin/sh
n=
while true
do
    fname="trace$n.log"
    [ -f "$fname" ] || break
    n=$(($n+1))
done
traceroute google.com >"$fname"

O procedimento acima percorre cada nome potencial por vez, trace.log, trace1.log, trace2.log, etc. Na primeira vez que encontra um nome que não existe, ele sai do loop e executa seu traceroutecomando.

Advertência: Este script não tenta lidar com condições de corrida. Em particular, há um instante após o script verificar a existência de um arquivo, mas antes de esse script abrir esse arquivo para gravação. Nesse instante, outro programa em execução poderia tentar criar o arquivo. No caso improvável de isso ser uma preocupação para você, seria necessária uma abordagem mais complexa.

informação relacionada