Question Utiliser la montre avec des tuyaux


Je voudrais lancer cette commande:

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

Mais ça ne marche pas, parce que "je pense" que le grep essaie de courir sur la montre au lieu de la queue ...

Y a-t-il un moyen de faire quelque chose comme

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

Merci beaucoup!


147
2018-05-12 19:23


origine




Réponses:


Entourer la commande avec des citations

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

234
2018-05-12 19:28



Que se passe-t-il si le pipeline contient également des guillemets (tels que awk '{print $3}')? Modifier: Comme ça - OrangeDog


Je peux me tromper, mais ne serait-ce pas la même chose (voir les lignes de journal correspondantes au fur et à mesure de leur ajout)?

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

27
2018-05-12 20:16



Je suis d'accord que cela peut être plus efficace en ce qui concerne le processeur, mais dans le contexte du sujet "Utiliser la montre avec des tuyaux", il n'utilise pas la montre n'est donc pas une réponse. Cela pourrait être le cas d'une mauvaise question d'exemple car la surveillance et les tuyaux semblent apparaître fréquemment, pas dans le contexte de la queue. - tudor
Non, je pense que vous confondez les moyens et la fin. L'utilisateur voulait clairement voir Doctrine arrivant dans un fichier croissant, et quand il a regardé dans sa boîte à outils, la seule chose qu'il a trouvée était watch. Ce qu'il avait vraiment besoin de savoir était tail -f. Voir également meta.stackexchange.com/questions/66377/what-is-the-xy-problem - dland
Je pense que ce sont les deux réponses acceptables. La réponse supérieure et acceptée répond correctement à la question exacte posée, et cette réponse identifie correctement la Problème XY ce OP créé pour eux-mêmes et fournit la solution qu'ils voulaient vraiment en premier lieu. Les deux réponses pourraient facilement être utiles à quelqu'un qui rencontre cette question. - cdhowie
Je cherchais un moyen de regarder shellcheck *.sh | grep line | wc -l et la réponse acceptée m'a été utile. - Amedee Van Gasse


Vous pouvez entourer la commande avec des guillemets:

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

Si la commande contient des guillemets, vous pouvez utiliser un autre type de guillemets avec un échappement approprié:

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

Si vous essayez de faire quelque chose de vraiment intelligent, mettez la commande ou les commandes dans un script et utilisez-la avec 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

Veillez à prendre en compte les chemins relatifs si nécessaire.


0
2017-08-27 16:00