Використання годинника з трубами


179

Я хотів би виконати цю команду:

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

Але це не біжить, бо "я думаю", що греп намагається бігти на годинник замість хвоста ...

Чи є спосіб зробити щось подібне

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

Дуже дякую!

Відповіді:


269

Обведіть команду лапками

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

2
Що робити, якщо трубопровід також містить лапки (такі як awk '{print $3}')? Edit: Як це
OrangeDog

2
ви можете уникнути цих символів за допомогою \, тобтоwatch -n 'awk \'{print $3}\''
лева

29

Я можу помилятися, але хіба це не вдасться досягти того самого (перегляд відповідних рядків журналу після їх додавання) простіше?

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

6
Я погоджуюся, що це може бути більш ефективним, що стосується процесора, але в контексті теми "Використання годинника з трубами" він не використовує годинник, тому це не є відповіддю. Це може бути випадком поганого прикладу, оскільки годинник і труби, здається, часто з’являються не в контексті хвоста.
tudor

1
Ні, я думаю, що ви плутаєте засоби та кінець. Користувач явно хотів побачити, що Doctrineнадходить у зростаючий файл, і коли він заглянув у свою панель інструментів, єдине, що знайшов, було watch. Що він насправді повинен був знати tail -f. Дивіться також meta.stackexchange.com/questions/66377/what-is-the-xy-problem
dland

10
Я думаю, що це обидва прийнятні відповіді. Верхня та прийнята відповідь правильно відповідає на поставлене запитання, і ця відповідь правильно визначає проблему XY, яку ОП створила для себе, і в першу чергу пропонує рішення, яке вони справді хотіли. Обидва відповіді легко можуть бути корисними для того, хто стикається з цим питанням.
cdhowie

2
Я шукав спосіб спостерігати, shellcheck *.sh | grep line | wc -lі прийнята відповідь була корисною для мене.
Амедей Ван Гассе

2

Ви можете оточити команду лапками:

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

Якщо команда містить в собі лапки, ви можете використовувати інший тип лапок з відповідним пробігом:

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

Якщо ви намагаєтесь зробити щось по-справжньому розумне, введіть команду або команди в сценарій і використовуйте це з 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

Обов’язково враховуйте відносні шляхи, якщо це необхідно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.