Как записать самую последнюю строку процесса в читаемый файл
У меня есть к вам вопрос, который носит теоретический характер.
Во время запуска процесса в терминале я часто забочусь о самой последней последней строке. И я хочу вызвать данные в этой строке из другой программы.
Итак, учтите, что я хочу создать что-то вроде сервера ping. Этот сервер ping запишет самую последнюю строку ping в текстовый файл. И этот файл можно прочитать без каких-либо повреждений.
Итак, для начала я бы сделал что-то простое, как
ping 8.8.8.8 > ping.txt
Но это собирается записать каждую строку в файл. Я просто хочу файл с самым последним пингом.
Теперь, если я доберусь до этой точки. У меня будут проблемы с чтением файла время от времени, потому что он также записывается. Как мне избежать этой проблемы?
1 ответ
Вот несколько практических ответов на ваш "теоретический" вопрос.
tail
могу сделать это для вас
Пример:
ping -c 10 8.8.8.8 | tail --lines=3 > output.file
ключ -c 10 в команде ping ограничивает количество пингов до 10, а не продолжается бесконечно, что является значением по умолчанию. переключатель lines=3 в хвостовой команде ограничивает вывод тремя последними строками, о чем мы обычно заботимся.
Это приведет только к сводке (последние 3 строки), как показано ниже:
--- 8.8.8.8 ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9014ms
rtt min/avg/max/mdev = 22.810/25.120/31.137/2.936 ms
Если по какой-то странной причине вы действительно хотите вывод одного пинга, просто измените вышеприведенное ping -c 1 8.8.8.8 | head --lines=2 | tail --lines=1 > output.file
В результате чего:
64 bytes from 8.8.8.8: icmp_seq=1 ttl=45 time=24.0 ms
Редактировать: Непрерывный одиночный пинг.
while :; do ping -c 1 8.8.8.8>output.file; sleep 1; done
Поскольку while: всегда оценивается как true, он будет бесконечно зацикливаться, запускать ping и перенаправлять вывод в output.file, перезаписывая его при каждом запуске цикла. Он останавливается на секунду с каждой итерацией, чтобы дать вам время прочитать вывод.
Вы можете поэкспериментировать со значениями сна менее секунды, такими как 0,5 или 0,01, но в какой-то момент у вас будет слишком короткая задержка между записями и вы вернетесь к тому, с чего начали.
Источники:
man ping
man tail
Опыт