У меня есть вопрос для Вас, который является теоретическим.
При выполнении процесса в терминале я часто просто забочусь о новой последней строке. И я хочу назвать данные в той строке из другой программы.
Так, полагайте, что я хочу создать что-то как сервер ping. Этот сервер ping запишет новую строку ping к текстовому файлу. И этот файл может быть считан без любого повреждения.
Таким образом для запуска я сделал бы что-то простое как
ping 8.8.8.8 > ping.txt
Но это собирается записать каждую строку в файл. Я просто хочу файл с новым ping.
Теперь, если я добираюсь до этой точки. Я испытаю затруднения при чтении файла время от времени, потому что это пишется в также. Как я избегаю этой проблемы?
Вот некоторые практические ответы на Ваш "теоретический" вопрос.
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
Опыт