سؤال استخدام المراقبة مع الأنابيب


أرغب في تشغيل هذا الأمر:

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

لكنها لا تعمل ، لأن "أعتقد" أن grep يحاول العمل على الساعة بدلاً من الذيل ...

هل هناك طريقة لفعل شيء من هذا القبيل

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

شكرا جزيلا!


154
2018-05-12 19:23


الأصل




الأجوبة:


تحيط الأمر مع اقتباسات

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

245
2018-05-12 19:28



ماذا لو كان خط الأنابيب يحتوي أيضا على اقتباسات (مثل awk '{print $3}')؟ تصحيح: مثله - OrangeDog
يمكنك الهروب تلك الأحرف مع \ ، أي watch -n 'awk \'{print $3}\'' - lev


قد أكون مخطئا ، لكن ألا يحقق ذلك الشيء نفسه (عرض خطوط السجل المطابقة كلما تمت إضافتها) بشكل أكثر بساطة؟

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

27
2018-05-12 20:16



أوافق على أن هذا قد يكون أكثر كفاءة بالنسبة لوحدة المعالجة المركزية ، ولكن في سياق موضوع "استخدام المراقبة باستخدام الأنابيب" ، فإنه لا يستخدم الساعة لذلك ليس جوابًا. قد تكون هذه حالة من أسئلة المثال السيئة حيث يبدو أن المراقبة والأنابيب لا تظهر في كثير من الأحيان في سياق الذيل. - tudor
لا ، أعتقد أنك تربك الوسائل والنهاية. أراد المستخدم بوضوح أن يرى Doctrine وصل إلى ملف متزايد ، وعندما نظر في صندوق أدواته ، كان الشيء الوحيد الذي وجده watch. ما كان في الحقيقة بحاجة إلى معرفته هو tail -f. أنظر أيضا meta.stackexchange.com/questions/66377/what-is-the-xy-problem - dland
أعتقد أن هذه إجابات مقبولة. الإجابة العلوية والمقبولة بشكل صحيح إجابات على السؤال الدقيق المطروحة ، وهذه الإجابة تحدد بشكل صحيح مشكلة XY أن OP خلق لأنفسهم ويوفر الحل الذي أرادوه حقا في المقام الأول. يمكن أن تكون كل الإجابات مفيدة بسهولة لشخص يواجه هذا السؤال. - cdhowie
كنت أبحث عن طريقة للمشاهدة shellcheck *.sh | grep line | wc -l وكانت الإجابة المقبولة مفيدة لي. - Amedee Van Gasse


يمكنك إحاطة الأمر بعلامتي اقتباس:

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

إذا كان الأمر يحتوي على علامات اقتباس ، يمكنك استخدام نوع مختلف من علامات الاقتباس مع الهروب المناسب:

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

إذا كنت تحاول القيام بشيء ذكي حقًا ، فضع الأوامر أو الأوامر في نص برمجي وقم باستخدامه مع المراقبة:

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

تأكد من حساب المسارات النسبية إذا لزم الأمر.


0
2017-08-27 16:00