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

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

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

Так, полагайте, что я хочу создать что-то как сервер ping. Этот сервер ping запишет новую строку ping к текстовому файлу. И этот файл может быть считан без любого повреждения.

Таким образом для запуска я сделал бы что-то простое как

ping 8.8.8.8 > ping.txt

Но это собирается записать каждую строку в файл. Я просто хочу файл с новым ping.

Теперь, если я добираюсь до этой точки. Я испытаю затруднения при чтении файла время от времени, потому что это пишется в также. Как я избегаю этой проблемы?

1
задан 1 March 2017 в 07:41

1 ответ

Вот некоторые практические ответы на Ваш "теоретический" вопрос.

tail может сделать это для Вас

Пример:

ping -c 10 8.8.8.8 | tail --lines=3 > output.file

переключатель-c 10 в команде ping ограничивает ping 10 вместо того, чтобы продолжиться неограниченно долго, который является значением по умолчанию. lines=3 переключаются в предельный вывод команды хвоста к последним 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 просто, изменяют вышеупомянутое к 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

Редактирование: Непрерывный единственный ping Согласно просьбе в комментарии:

while :; do ping -c 1 8.8.8.8>output.file; sleep 1; done

С тех пор, в то время как: всегда оценивает как верный, что это циклично выполнится неограниченно долго, выполняя 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

1
ответ дан 7 December 2019 в 15:39

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

Похожие вопросы: