¿Cómo hacer que un bash escriba en trace.log, trace1.log, etc.?

¿Cómo hacer que un bash escriba en trace.log, trace1.log, etc.?

¿Estoy creando un script y me gustaría escribirlo en otro archivo si ese existe?

traceroute google.com > trace.log

Cualquier ayuda sería apreciada.
Además, soy un novato, por lo que un ejemplo sería útil.
Gracias.

Respuesta1

Aquí hay un enfoque:

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

Lo anterior recorre cada nombre potencial por turno, trace.log, trace1.log, trace2.log, etc. La primera vez que encuentra un nombre que no existe, sale del bucle y ejecuta su traceroutecomando.

Advertencia: este script no intenta manejar las condiciones de carrera. En particular, hay un instante en el tiempo después de que el script verifica la existencia de un archivo pero antes de que este script abra ese archivo para escribir. En ese instante, otro programa en ejecución podría intentar crear el archivo. En el improbable caso de que esto le preocupe, sería necesario un enfoque más complejo.

información relacionada