Como escrever a linha mais recente de um processo em um arquivo legível

1

Eu tenho uma pergunta para você que é teórica.

Durante a execução de um processo no terminal, muitas vezes me preocupo com a última linha mais recente. E quero chamar os dados dessa linha de outro programa.

Então, considere que eu quero construir algo como um servidor de ping. Este servidor ping irá escrever a linha mais recente de ping para um arquivo de texto. E esse arquivo pode ser lido sem qualquer dano.

Então, para começar, eu faria algo simples como

ping 8.8.8.8 > ping.txt

Mas isso vai escrever cada linha no arquivo. Eu só quero um arquivo com o ping mais recente.

Agora, se eu chegar a este ponto. Eu terei problemas para ler o arquivo às vezes porque ele está sendo gravado também. Como evito esse problema?

    
por cylondude 28.02.2017 / 21:28

1 resposta

1

Aqui estão algumas respostas práticas para sua pergunta "teórica".

tail pode fazer isso por você

Exemplo:

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

A opção -c 10 no comando ping limita os pings a 10 em vez de continuar indefinidamente, o que é o padrão. o comando lines = 3 no comando tail limita a saída para as últimas 3 linhas, que é o que realmente nos interessa normalmente.

Isso resultará apenas no resumo (últimas 3 linhas), conforme mostrado abaixo:

--- 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

Se por alguma estranha razão você realmente quiser a saída de um único ping, apenas modifique o acima para ping -c 1 8.8.8.8 | head --lines=2 | tail --lines=1 > output.file

Como resultado:

64 bytes from 8.8.8.8: icmp_seq=1 ttl=45 time=24.0 ms

Editar: ping único contínuo Conforme solicitado no comentário:

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

Dado que while: sempre é avaliado como true, ele será executado indefinidamente, executando ping e redirecionando a saída para output.file, sobrescrevendo-a sempre que o loop for executado. Ele pausa por um segundo a cada iteração para permitir que você leia a saída.

Você pode experimentar com valores de sono abaixo de um segundo, como 0,5 ou 0,01, mas em algum momento você terá um atraso muito curto entre as gravações e estará de volta onde começou.

Fontes:

man ping

man tail

Experiência

link

link

    
por Elder Geek 28.02.2017 / 21:44