Как записать самую последнюю строку процесса в читаемый файл

У меня есть к вам вопрос, который носит теоретический характер.

Во время запуска процесса в терминале я часто забочусь о самой последней последней строке. И я хочу вызвать данные в этой строке из другой программы.

Итак, учтите, что я хочу создать что-то вроде сервера 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

Опыт

https://www.cyberciti.biz/faq/bash-infinite-loop/

http://www.linuxforums.org/forum/programming-scripting/70966-possible-sleep-less-than-1-sec-simple-bash-script.html

Другие вопросы по тегам