Apakah ada cara untuk membuat bunyi bip -F?

23

Apakah ada cara untuk membuat tail -Fatau lessmembunyikan bip (membunyikan bel di terminal) saat data baru masuk (baris baru ditambahkan ke file). Atau ada utilitas unix lain untuk melakukan ini di linux atau mac.

Ali
sumber

Jawaban:

13

Gagasan untuk mengirim output tailmelalui seddan mengganti baris baru dengan bel / baris baru.

Tetapi ada kemungkinan solusi yang lebih mudah jika Anda menggunakan di taildalam x-window . Di sana Anda dapat melakukan suatu tindakan ketika konten jendela berubah (flicker, bell, apa pun).

Nils
sumber
4
Jangan ganti baris baru, tambahkan di akhir baris.
Kevin
@Nils, sedIde ini brilian tetapi saya tidak tahu 'sed' cukup untuk membuatnya bekerja, sepertinya saya tidak bisa menangkap baris baru di regexpt dengan cara biasa (yang saya sudah terbiasa), saya kira saya perlu memberi tahu sed jangan menginterpretasikan aliran stream yang masuk per baris.
Ali
5
@ Ali Memang, sed bertindak baris demi baris dan Anda tidak langsung melihat baris baru. sed -e $'s/$/\a/'menambahkan $'\a'(karakter bel dalam sintaks ksh / bash / zsh) di akhir setiap baris.
Gilles 'SANGAT berhenti menjadi jahat'
Terima kasih @Gilles, bekerja seperti pesona (di mac juga)! sedregexpt agak aneh di mataku yang naif.
Ali
1
@Gilles: Perhatikan bahwa $'...'sintaks tidak universal. Misalnya, [t] csh tidak mendukungnya.
Keith Thompson
13

jika Anda menggunakan GNU screen, Anda dapat mengaturnya untuk "menonton" jendela dengan ekornya, dan itu akan memberi tahu Anda di bilah status Anda, atau dengan bel yang ditentukan termcap Anda, bahwa ada keluaran baru di jendela itu.

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


sunting: baru saja menambahkan ini, karena Anda menyebutkan mac os x

hanya untuk bersenang-senang, jika Anda mencari sesuatu yang khusus, Anda dapat menggunakan sayperintah Mac OS X untuk membacakan file yang sedang Anda tonton. dapatkan saja logtailperintahnya, dari:

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

Dan menggunakannya dalam skrip seperti:

#!/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 Kennedy
sumber
Terima kasih @Tim,, screenacara dan peringatan (saya kira saya bisa membuatnya membunyikan bel juga) HANYA SEKALI. Tidak untuk setiap acara baru yang terjadi (tidak untuk setiap baris baru yang tersedia)
Ali
1
saya menambahkan contoh untuk mac yang bisa membaca file untuk Anda. Anda bisa mengubahnya agar berfungsi untuk linux dengan menginstal versi linux dari logtail, dan menggunakan beepperintah, alih-alih say.
Tim Kennedy
keren! Itu kreatif, walaupun dalam kasus saya saya menggunakan bip untuk dapat memonitor file log tanpa melihat layar. Dan bunyi bip yang sebenarnya mungkin lebih baik daripada suara.
Ali
1
Bisa juga menggunakan execperintah layar untuk melakukannya juga. Contoh di halaman manual adalah !:sed -n s/.*Error.*/\007/pyang akan mengirim lonceng setiap kali "Kesalahan" ditampilkan di jendela itu.
Arcege
Hal yang sama berlaku untuk Tmux.
0xC0000022L
10

Anda bisa menggunakan multitail . Ini adalah ekor yang disempurnakan yang mendukung eksekusi perintah pada kecocokan ekspresi reguler.

Misalnya perintah berikut memainkan suara dan membuka jendela xmessage setiap kali paket sumber Mars dicatat.

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

Sekadar catatan, seperti yang disarankan @Nils saya gunakan seduntuk menambahkan bellke setiap baris.

The sedbaris yang disediakan oleh @Gilles

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

berfungsi di mac saya (saya mengaktifkan "bel terdengar" dan "bel visual" di Terminal \ preferensi \ lanjutan).

Ali
sumber
Dari catatan adalah bahwa $'...'urutan melarikan diri adalah hal Bash-only.
amfetamachine
@amphetamachine terima kasih, sementara saya sendiri adalah pengguna bash, alangkah baiknya jika Anda atau orang lain dapat menambahkan versi yang akan bekerja pada shell lain juga.
Ali
Saya juga pengguna bash, tapi perlahan-lahan saya mempelajari apa yang akan dan tidak akan berhasil di shell lain.
amphetamachine
1

Untuk siapa pun yang menemukan halaman ini, saya menggunakan tcsh dan ini sepertinya berfungsi:

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

Jangan tanya saya apa arti sintaks sed ...

raymond
sumber
1
Saya tidak bisa menahan diri, saya harus bertanya, dapatkah Anda menjelaskan ekspresi sed?
Ashwani Agarwal
0

Anda dapat mencoba konsoleyang memungkinkan lansiran tentang aktivitas baru (atau hening) di tab mana saja.

Aaron D. Marasco
sumber
Saya membayangkan konsoleakan seperti screenitu peringatan sekali, sementara saya harus menerima peringatan untuk setiap baris baru.
Ali