Czy istnieje sposób na wygenerowanie sygnału dźwiękowego -F?


23

Czy istnieje sposób na wygenerowanie tail -Flub lesswygenerowanie sygnału dźwiękowego (dzwonienie w terminalu), gdy pojawią się nowe dane (do pliku zostanie dodana nowa linia). Czy jest też jakieś inne narzędzie uniksowe, które może to zrobić na Linuxie lub Macu.

Odpowiedzi:


13

Idealnym pomysłem jest przepuszczenie wyjścia tailprzez sedi zastąpienie nowej linii dzwonkiem / nową linią.

Ale jest prawdopodobnie łatwiejsze rozwiązanie, jeśli używasz tailw oknie X-Window . Tam możesz wykonać akcję, gdy zmieni się zawartość okna (migotanie, dzwonek, cokolwiek).


4
Nie zastępuj nowego wiersza, dodaj go na końcu wiersza.
— Kevin,

@Nils, ten sedpomysł jest genialny, ale nie wiem wystarczająco dużo „sed”, aby zadziałało, wygląda na to, że nie mogę przechwytywać nowych wierszy w wyrażeniu regularnym w zwykły sposób (do którego jestem przyzwyczajony). Chyba muszę powiedzieć sed nie interpretuj przychodzącego strumienia linia po linii.
— Ali,

5
@Ali Rzeczywiście, sed działa linia po linii i nie widzisz bezpośrednio nowych linii. sed -e $'s/$/\a/'dodaje $'\a'(znak dzwonka w składni ksh / bash / zsh) na końcu każdej linii.
— Gilles 'SO - przestań być zły'

Dzięki @Gilles, działało jak urok (również na Macu)! sedregexpt jest trochę dziwny dla moich naiwnych oczu.
— Ali,

1
@Gilles: Pamiętaj, że $'...'składnia nie jest uniwersalna. Na przykład [t] csh nie obsługuje tego.
— Keith Thompson

13

jeśli korzystasz z GNU screen, możesz ustawić go tak, aby „obserwował” okno ogonem, a na pasku stanu lub za pomocą dzwonka zdefiniowanego przez termcap ostrzeże cię, że w tym oknie pojawi się nowe wyjście.

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


edycja: po prostu musiałem to dodać, ponieważ wspomniałeś o Mac OS X

dla zabawy, jeśli szukasz czegoś konkretnego, możesz użyć polecenia Mac OS X, sayaby odczytać oglądany plik. po prostu pobierz logtailpolecenie z:

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

I użyj go w skrypcie, takim jak:

#!/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

Dzięki @Tim, screenpokazuje i ostrzega (myślę, że mogę sprawić, żeby zadzwonił również dzwonkiem) TYLKO RAZ. Nie dla każdego nowego wydarzenia, które się wydarzy (nie dla każdej nowej linii, która jest dostępna)
— Ali,

1
dodałem przykład dla systemu Mac, który może odczytać plik. możesz to zmienić, aby działało w systemie Linux, instalując wersję logtail linuksa i używając beeppolecenia zamiast say.
— Tim Kennedy,

fajne! Jest to kreatywne, chociaż w moim przypadku używam sygnału dźwiękowego, aby móc monitorować plik dziennika bez patrzenia na ekran. Rzeczywisty dźwięk może być lepszy niż głos.
— Ali,

1
Można to również execzrobić za pomocą polecenia screen . Przykładem na stronie podręcznika jest to, !:sed -n s/.*Error.*/\007/pże wyśle ​​dzwonek za każdym razem, gdy w tym oknie jest wyświetlany komunikat „Błąd”.
— Arcege

To samo dotyczy Tmux.
— 0xC0000022L

10

Możesz użyć multitaila . Jest to ulepszony ogon, który obsługuje wykonywanie poleceń w dopasowaniu wyrażeń regularnych.

Np. Następujące polecenie odtwarza dźwięk i otwiera okno xmessage przy każdym logowaniu pakietu źródłowego marsjańskiego .

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

4

Dla przypomnienia, jak sugeruje @Nils, że używam sed do dodaniabell do każdej linii.

sedLinia dostarczone przez @Gilles

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

działa na moim komputerze Mac (w moim terminalu \ preferencje \ zaawansowane włączyłem „dźwiękowy dzwonek” i „wizualny dzwonek”).


Warto zauważyć, że $'...'sekwencje specjalne to tylko Bash.
— amfetamachina

@amphetamachine dzięki, podczas gdy ja sam jestem użytkownikiem bash, byłoby miło, gdybyście ty lub inni mogli dodać wersje, które działałyby również na innych powłokach.
— Ali

Jestem również użytkownikiem bash, ale powoli uczę się, co będzie działać, a co nie będzie działać w innych powłokach.
— amfetamachina

1

Dla każdego, kto znajdzie tę stronę, używam tcsh i wygląda na to, że działa:

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

Nie pytaj mnie, co oznacza składnia sed ...


1
Nie mogę się powstrzymać, muszę zapytać, czy możesz wyjaśnić sed wyrażenie?
— Ashwani Agarwal

0

Możesz wypróbować konsoleopcję, która pozwala ostrzegać o nowej aktywności (lub ciszy) w dowolnej zakładce.


Wyobrażam sobie, konsoleże to tak screen, jakby raz to ostrzegało, a ja muszę otrzymywać ostrzeżenie dla każdej nowej linii.
— Ali,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.