Gnu coreutils desde que a versão 7.0 possui um comando timeout
:
timeout 10 tail -f /var/log/whatever.log
Se você realmente precisar de um canal para o tempo limite para um procedimento ligeiramente diferente, envie para timeout
:
tail -f /var/log/whatever.log | timeout 10 cat > ./10_second_sample_of_log
Note, entretanto, que matar alguma parte arbitrária de um pipeline pode causar problemas devido ao buffer , dependendo dos sinais e do comportamento do programa (essa questão cobre problemas relacionados: Desativar o buffer no tubo ). Ele normalmente irá alterar o código de saída do processo também.
Se você não tem (um recente) coreutils, este simples programa de tempo limite também funciona bem link ou a abordagem perl:
tail -f /var/log/whatever.log | perl -n -e 'BEGIN{alarm 10; $|=1}; print;'
(Observe que $|=1
desativa o buffer de saída, isso é para evitar perda de saída no pipeline, conforme mencionado acima.)
O pacote (um pouco antigo) Netpipes também tem um comando timelimit
(que você pode ainda encontrar em alguns sistemas Linux).
Esta pergunta semelhante tem mais algumas opções: Como introduzir o tempo limite para scripts de shell?