มีวิธีทำเสียงเตือนแบบหาง -F หรือไม่?


23

มีวิธีทำtail -Fหรือlessส่งเสียงบี๊บ (กดกริ่งในเทอร์มินัล) เมื่อมีข้อมูลใหม่เข้ามา (มีการเพิ่มบรรทัดใหม่ในไฟล์) หรือมียูทิลิตี้ยูนิกซ์อื่น ๆ ให้ทำเช่นนี้บน linux หรือ mac

คำตอบ:


13

แนวคิดที่จะนำไปสู่การส่งออกของtailthrough sedและแทนที่ newline ด้วย bell / newline

แต่มี propably วิธีการแก้ปัญหาได้ง่ายขึ้นถ้าคุณใช้tailภายในx หน้าต่าง ที่นั่นคุณสามารถดำเนินการเมื่อเนื้อหาของหน้าต่างเปลี่ยนไป (สั่นกระดิ่งหรืออะไรก็ตาม)


4
อย่าแทนที่บรรทัดใหม่ให้เพิ่มที่ส่วนท้ายของบรรทัด
เควิน

@ ไม่มีsedความคิดนี้ยอดเยี่ยม แต่ฉันไม่รู้ว่า 'sed' มากพอที่จะทำให้มันทำงานได้ดูเหมือนว่าฉันไม่สามารถขึ้นบรรทัดใหม่ใน regexpt ตามปกติ (ที่ฉันคุ้นเคย) ฉันเดาว่าฉันต้องบอก sed อย่าแปลค่าสตรีมที่เข้ามาทีละบรรทัด
Ali

5
@Ali แท้จริงแล้ว sed ทำหน้าที่เป็นบรรทัดต่อบรรทัดและคุณไม่เห็นบรรทัดใหม่โดยตรง sed -e $'s/$/\a/'เพิ่ม$'\a'(ตัวอักษรระฆังในไวยากรณ์ ksh / bash / zsh) ที่ส่วนท้ายของแต่ละบรรทัด
Gilles 'หยุดความชั่วร้าย'

ขอบคุณ @Gilles ทำงานเหมือนมีเสน่ห์ (สำหรับ mac ด้วย)! sedregexpt เป็นบิตแปลกตาของฉันไร้เดียงสา
อาลี

1
@Gilles: โปรดทราบว่า$'...'ไวยากรณ์ไม่เป็นสากล ตัวอย่างเช่น [t] csh ไม่สนับสนุน
Keith Thompson

13

หากคุณใช้ GNU screenคุณสามารถตั้งค่าเป็น "เฝ้าดู" หน้าต่างด้วยส่วนท้ายและมันจะเตือนคุณในแถบสถานะของคุณหรือด้วยระฆังที่กำหนดไว้ของ termcap ของคุณว่ามีเอาต์พุตใหม่ในหน้าต่างนั้น

http://www.gnu.org/software/screen/manual/html%5Fnode/Monitor.html#Monitor


แก้ไข: เพิ่งต้องเพิ่มสิ่งนี้เนื่องจากคุณพูดถึง mac os x

เพียงเพื่อความสนุกหากคุณกำลังมองหาบางอย่างเป็นพิเศษคุณสามารถใช้sayคำสั่งของ Mac OS X เพื่ออ่านไฟล์ที่คุณกำลังดูอยู่ เพิ่งได้logtailรับคำสั่งจาก:

http://www.hmug.org/pub/MacOS_X/BSD/Administration/Log/logcheck/

และใช้ในสคริปต์เช่น:

#!/bin/bash

file=$1
offset=$(basename "$1")

# while true... let this thing run until it's killed...
while true; do
    output=$(/usr/local/bin/logtail $file .${offset}.offset)
    if [ ! -z "$output" ]; then

        # print the output and say ding
        echo "$output" && say ding
        # to have the file read aloud to you, uncomment the following:
        say "$output"

        fi
    # recheck every 5 seconds
    sleep 5
done

ขอบคุณ @Tim, screenรายการและการแจ้งเตือน (ฉันเดาว่าฉันสามารถทำให้มันส่งเสียงกริ่งได้เช่นกัน) เพียงครั้งเดียวเท่านั้น ไม่ใช่สำหรับทุกเหตุการณ์ใหม่ที่เกิดขึ้น (ไม่ใช่สำหรับทุก ๆ บรรทัดใหม่ที่มีอยู่)
Ali

1
ฉันได้เพิ่มตัวอย่างสำหรับ mac ที่สามารถอ่านไฟล์ให้คุณได้ คุณสามารถเปลี่ยนที่ไปทำงานสำหรับลินุกซ์โดยการติดตั้งรุ่นลินุกซ์ของ logtail และใช้คำสั่งแทนbeep say
ทิมเคนเนดี

เย็น! นั่นคือความคิดสร้างสรรค์แม้ว่าในกรณีของฉันฉันใช้เสียงบี๊บเพื่อให้สามารถตรวจสอบไฟล์บันทึกได้โดยไม่ต้องดูหน้าจอ และเสียงบี๊บที่เกิดขึ้นจริงอาจดีกว่าเสียง
Ali

1
ยังสามารถใช้execคำสั่งของหน้าจอเพื่อทำมันได้เช่นกัน ตัวอย่างใน manpage คือ!:sed -n s/.*Error.*/\007/pสิ่งที่จะส่งสัญญาณระฆังทุกครั้งที่ "ข้อผิดพลาด" ปรากฏขึ้นในหน้าต่างนั้น
Arcege

เช่นเดียวกับ Tmux
0xC0000022L

10

คุณสามารถใช้มัลติแทล มันเป็นหางที่ได้รับการปรับปรุงซึ่งรองรับการประมวลผลคำสั่งในการจับคู่นิพจน์ทั่วไป

เช่นคำสั่งต่อไปนี้จะเล่นเสียงและเปิดหน้าต่าง xmessage ทุกครั้งที่มีการบันทึกแพ็กเก็ตแหล่งดาวอังคาร

multitail -ex "martian source" "play beep.wav; xmessage " -i /var/log/messages

4

สำหรับบันทึกอย่างที่ @Nils แนะนำให้ใช้sedเพื่อเพิ่ม a bellในแต่ละบรรทัด

sedสายให้บริการโดย @Gilles

sed -e $'s/$/\a/' 

ใช้งานได้บน mac ของฉัน (ฉันเปิดใช้งาน "เสียงเตือน" และ "ภาพเสียง" ใน Terminal \ preferences \ advanced ของฉัน)


สิ่งที่ควรทราบคือ$'...'escape sequences นั้นเป็นเพียง Bash เท่านั้น
แอมเฟตามาจิน

@amphetamachine ขอบคุณในขณะที่ฉันเป็นผู้ใช้ทุบตีตัวเองมันจะดีถ้าคุณหรือคนอื่น ๆ สามารถเพิ่มรุ่นที่จะทำงานบนเชลล์อื่น ๆ เช่นกัน
อาลี

ฉันเป็นผู้ใช้ทุบตีด้วย แต่ฉันค่อย ๆ เรียนรู้ว่าอะไรจะและจะไม่ทำงานในกระสุนอื่น ๆ
แอมเฟตามาจิน

1

สำหรับคนอื่นที่พบหน้านี้ฉันใช้ tcsh และดูเหมือนว่าจะใช้งานได้:

tail -f changingfile | sed -e 's/.*/& \a/'

อย่าถามฉันว่าไวยากรณ์ที่ดีหมายถึงอะไร ...


1
ฉันช่วยตัวเองไม่ได้ฉันถามคุณช่วยอธิบายการแสดงออกทางอารมณ์ได้ไหม?
Ashwani Agarwal

0

คุณสามารถลองใช้การkonsoleแจ้งเตือนเกี่ยวกับกิจกรรมใหม่ (หรือปิดเสียง) ในแท็บใดก็ได้


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