Usando relógio com canos


179

Eu gostaria de executar este comando:

watch -n 1 tail -n 200 log/site_dev.log | grep Doctrine

Mas não funciona, porque "acho" que o grep tenta rodar no relógio em vez da cauda ...

Existe uma maneira de fazer algo como

watch -n 1 (tail -n 200 log/site_dev.log | grep Doctrine)

Muito obrigado!

Respostas:


269

Coloque o comando entre aspas

watch -n 1 'tail -n 200 log/site_dev.log | fgrep Doctrine'

2
E se o pipeline também contiver aspas (como awk '{print $3}')? Edit: Como este
OrangeDog 06/06

2
você pode escapar esses caracteres com \, ou sejawatch -n 'awk \'{print $3}\''
lev

29

Eu posso estar errado, mas isso não alcançaria a mesma coisa (visualizando as linhas de log correspondentes à medida que são adicionadas) de maneira mais simples?

tail -f -n 200 log/site_dev.log | grep Doctrine

6
Concordo que isso pode ser mais eficiente no que diz respeito à CPU, mas no contexto do tópico "Usando o watch with pipes", ele não usa o watch, portanto não é uma resposta. Este pode ser um caso de um exemplo ruim, já que os relógios e os canos parecem não aparecer com frequência no contexto da cauda.
quer

1
Não, acho que você está confundindo os meios e o fim. O usuário claramente queria ver a Doctrinechegada de um arquivo crescente e, quando ele olhou em sua caixa de ferramentas, a única coisa que encontrou foi watch. O que ele realmente precisava saber era tail -f. Veja também meta.stackexchange.com/questions/66377/what-is-the-xy-problem
dland

10
Eu acho que essas são respostas aceitáveis. A resposta superior e aceita responde corretamente a pergunta exata feita, e essa resposta identifica corretamente o problema XY que o OP criou para si e fornece a solução que eles realmente queriam. Ambas as respostas podem ser facilmente úteis para alguém que se depara com essa pergunta.
cdhowie

2
Eu estava procurando uma maneira de assistir shellcheck *.sh | grep line | wc -le a resposta aceita foi útil para mim.
Amedee Van Gasse

2

Você pode colocar o comando entre aspas:

watch -n 1 'tail -n 200 log/site_dev.log | fgrep Doctrine'

Se o comando contiver aspas, você poderá usar um tipo diferente de aspas com escape apropriado:

watch -n 1 $'tail -n 200 log/site_dev.log | fgrep \'Doctrine.*\''

Se você estiver tentando fazer algo realmente inteligente, coloque o comando ou comandos em um script e use-o com o watch:

cat <<EOF >/tmp/watch-command
tail -n 200 $(pwd)/log/site_dev.log | fgrep Doctrine
EOF
chmod +x /tmp/watch-command
watch /tmp/watch-command

Certifique-se de levar em consideração os caminhos relativos, se necessário.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.