อาจเป็นได้ว่า "ดู" ไม่ใช่สิ่งที่คุณต้องการ คุณอาจต้องการขอความช่วยเหลือในการแก้ปัญหาของคุณไม่ใช่ในการใช้โซลูชันของคุณ! :)
หากเป้าหมายที่แท้จริงของคุณคือเรียกการกระทำตามสิ่งที่เห็นจากtail
คำสั่งคุณสามารถทำได้โดยเป็นส่วนหนึ่งของส่วนท้าย แทนการทำงาน "เป็นระยะ ๆ" ซึ่งเป็นสิ่งที่watch
ไม่คุณสามารถเรียกใช้รหัสของคุณเกี่ยวกับความต้องการ
#!/bin/sh
tail -F /var/log/somelogfile | while read line; do
if echo "$line" | grep -q '[Ss]ome.regex'; then
# do your stuff
fi
done
โปรดทราบว่าtail -F
จะยังคงติดตามไฟล์บันทึกต่อไปแม้ว่าจะได้รับการหมุนเวียนโดย newsyslog หรือ logrotate tail -f
คุณต้องการที่จะใช้วิธีนี้แทนกรณีที่ต่ำกว่า ตรวจสอบman tail
รายละเอียด
หากคุณต้องการรันคำสั่งเป็นระยะ ๆ คำตอบอื่น ๆ ที่ให้ไว้สามารถเปลี่ยนเป็นเชลล์สคริปต์แบบสั้นได้:
#!/bin/sh
if [ -z "$2" ]; then
echo "Usage: $0 SECONDS COMMAND" >&2
exit 1
fi
SECONDS=$1
shift 1
while sleep $SECONDS; do
clear
$*
done