Utiliser la montre avec des pipes

179

J'aimerais lancer cette commande:

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

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

Y at-il un moyen de faire quelque chose comme

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

Merci beaucoup!

Tommy B.
la source

Réponses:

269

Entourez la commande avec des guillemets

watch -n 1 'tail -n 200 log/site_dev.log | fgrep Doctrine'
tonylo
la source
2
Que se passe-t-il si le pipeline contient également des guillemets (tels que awk '{print $3}')? Edit: Comme ça
OrangeDog
2
vous pouvez échapper à ces caractères avec \, c'estwatch -n 'awk \'{print $3}\''
lev
29

Je peux me tromper, mais est-ce que cela ne ferait pas la même chose (voir les lignes de journal correspondantes au fur et à mesure qu'elles sont ajoutées) plus simplement?

tail -f -n 200 log/site_dev.log | grep Doctrine
Mitch
la source
6
Je conviens que cela pourrait être plus efficace en ce qui concerne le processeur, mais dans le contexte du sujet "Utilisation de la montre avec des tuyaux", il n’utilise pas la montre et n’est donc pas une réponse. Ceci pourrait être un exemple de question médiocre, car la montre et les pipes semblent souvent ne pas apparaître dans le contexte de la queue.
Tudor
1
Non, je pense que vous confondez les moyens et la fin. L'utilisateur voulait clairement voir Doctrinearriver dans un fichier en pleine croissance, et lorsqu'il regarda dans sa boîte à outils, la seule chose qu'il trouva fut watch. Ce qu'il avait vraiment besoin de savoir, c'était tail -f. Voir aussi meta.stackexchange.com/questions/66377/what-is-the-xy-problem
dland
10
Je pense que ce sont deux réponses acceptables. La réponse la plus récente et acceptée répond correctement à la question exacte posée. Cette réponse identifie correctement le problème XY créé par OP et fournit la solution qu’elle souhaitait réellement. Les deux réponses pourraient facilement être utiles à quelqu'un qui tombe sur cette question.
cdhowie
2
Je cherchais un moyen de regarder shellcheck *.sh | grep line | wc -let la réponse acceptée m'a été utile.
Amédée Van Gasse
2

Vous pouvez entourer la commande de guillemets:

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

Si la commande contient des guillemets, vous pouvez utiliser un type de guillemets différent avec l'é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 cela 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

Assurez-vous de prendre en compte les chemins relatifs si nécessaire.

bschlueter
la source