การใช้นาฬิกากับท่อ


179

ฉันต้องการเรียกใช้คำสั่งนี้:

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)

ขอบคุณมาก!

คำตอบ:


269

ล้อมรอบคำสั่งด้วยเครื่องหมายคำพูด

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

2
เกิดอะไรขึ้นถ้าไปป์ไลน์มีเครื่องหมายคำพูด (เช่นawk '{print $3}') แก้ไข: เช่นนี้
OrangeDog

2
คุณสามารถหลบหนีตัวอักษรเหล่านั้นด้วย \, เช่นwatch -n 'awk \'{print $3}\''
lev

29

ฉันอาจจะผิด แต่สิ่งนี้จะไม่ประสบความสำเร็จในลักษณะเดียวกัน

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

6
ฉันยอมรับว่านี่อาจมีประสิทธิภาพมากกว่าที่ซีพียูเกี่ยวข้อง แต่ในบริบทของหัวข้อ "การใช้ watch with pipes" มันไม่ได้ใช้ watch ดังนั้นจึงไม่ใช่คำตอบ นี่อาจเป็นกรณีของคำถามตัวอย่างที่ไม่ดีเนื่องจากนาฬิกาและท่อดูเหมือนจะปรากฏขึ้นบ่อยครั้งไม่ได้อยู่ในบริบทของหาง
ทิวดอร์

1
ไม่ฉันคิดว่าคุณสับสนหมายถึงและจุดจบ ผู้ใช้ต้องการอย่างชัดเจนที่จะเห็นเข้ามาในแฟ้มการเจริญเติบโตและเมื่อเขามองในกล่องเครื่องมือของเขาสิ่งเดียวที่เขาพบคือDoctrine สิ่งที่เขาต้องการจริงๆจะรู้ว่าเป็นwatch tail -fดูเพิ่มเติมที่meta.stackexchange.com/questions/66377/what-is-the-xy-problem
dland

10
ฉันคิดว่าสิ่งเหล่านี้เป็นคำตอบที่ยอมรับได้ คำตอบที่ได้รับการยอมรับและถูกต้องตอบคำถามที่ถูกต้องอย่างถูกต้องและคำตอบนี้ระบุปัญหา XYที่ OP สร้างขึ้นเองอย่างถูกต้องและให้คำตอบที่พวกเขาต้องการในตอนแรก คำตอบทั้งสองอาจเป็นประโยชน์กับคนที่เจอคำถามนี้
cdhowie

2
ฉันกำลังมองหาวิธีการดูshellcheck *.sh | grep line | wc -lและคำตอบที่ได้รับการยอมรับมีประโยชน์สำหรับฉัน
Amedee Van Gasse

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.*\''

หากคุณกำลังพยายามทำสิ่งที่ฉลาดจริง ๆ ให้วางคำสั่งหรือคำสั่งลงในสคริปต์และใช้สิ่งนั้นกับนาฬิกา:

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

ตรวจสอบให้แน่ใจว่าบัญชีสำหรับเส้นทางญาติถ้าจำเป็น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.