Как заставить bash записывать в trace.log, trace1.log и т. д.?

Как заставить bash записывать в trace.log, trace1.log и т. д.?

Я создаю скрипт и хотел бы записать его в другой файл, если он существует?

traceroute google.com > trace.log

Любая помощь будет оценена по достоинству.
Кроме того, я новичок, поэтому пример был бы полезен.
Спасибо.

решение1

Вот один из подходов:

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

Вышеприведенный код поочередно перебирает каждое потенциальное имя, trace.log, trace1.log, trace2.logи т.д. В первый раз, когда он находит несуществующее имя, он прерывает цикл и запускает вашу tracerouteкоманду.

Предостережение: этот скрипт не пытается обрабатывать состояния гонки. В частности, есть момент времени после того, как скрипт проверяет существование файла, но до того, как этот скрипт открывает этот файл для записи. В этот момент другая запущенная программа может попытаться создать файл. В маловероятном случае, если это беспокоит вас, потребуется более сложный подход.

Связанный контент