Chcę, aby mój komputer generował dźwięk systemowy przy każdym zdarzeniu ogona
Mam następujące polecenie
tail -f development.log | grep "something rare"
czy jest prosty sposób na podłączenie go do czegoś, co emituje sygnał dźwiękowy? lubić
tail -f development.log | grep "something rare" | beep
jeśli tak, to czy wyjście grep nadal będzie wyświetlane?
Odpowiedzi:
Po prostu zdefiniuj
beep
następująco:Następnie możesz użyć polecenia:
źródło
sed
lub podobnie (między ogonem i grepem), używając wyrażenia regularnego zamieniając je nasomething rare
siebie wiele razy. Ile razy trzeba to zrobić, zależy od tego, ile rury jest buforowane.tail -f development.log | stdbuf -oL -eL grep "something rare" | beep
Ekran GNU ma wbudowaną funkcję sygnalizowania dźwiękiem, gdy dane okno się zmienia: patrz odpowiedni rozdział strony podręcznika .
Podsumowanie nagłówka:
Jak wskazano w komentarzach, będzie to wydawać sygnał dźwiękowy przy każdym nowym wpisie dziennika, nie tylko tym, które pasują do „czegoś rzadkiego”, więc nie robi to dokładnie tego, o co prosi OP. Nadal przydatna sztuczka, aby poznać IMHO.
Możesz uzyskać to, co najlepsze z obu światów, otwierając dwa
screen
okna (<C-a> c
aby otworzyć okno i<C-a> <C-a>
przełączać się między dwoma oknami):tail -f yourfile.log | grep 'something rare'
tail -f yourfile.log
Następnie możesz usiąść i obserwować, jak dziennik przewija się obok w oknie 2, a usłyszysz sygnał dźwiękowy z okna 1, gdy wystąpi „coś rzadkiego”.
screen
jest niesamowicie wszechstronny - gorąco polecam lekturę.źródło
tail -f yourfile.log | grep something\ rare
czymś więcej niżtail -f logfile
something rare
. Edytowane, aby to odzwierciedlić. Grep zadziałałby, ale wtedy nie zobaczyłby reszty dziennika, tylko rzadkich linii - jak rozumiem, chce móc obserwować cały przewijany dziennik, ale być powiadamianym o określonych zdarzeniach.Możesz zatrzymać buforowanie danych wyjściowych za pomocą polecenia grep. Zobacz man grep po szczegóły.
Możesz przesłać wyjście grep do sygnału dźwiękowego.
Poniższy przykład pochodzi z sygnału dźwiękowego człowieka ...
W tych instrukcjach jest wiele dobrych rzeczy. Gdybyśmy nie musieli ich czytać, aby je znaleźć. ;-)
źródło
Polecenie watch ma opcję --beep i możesz również ustawić interwał odpytywania, ale standardowy z 2 sekundami powinien być ok
źródło
watch
działa, uruchamiając parametr / polecenie co sekcje (przedział), a następnie przechodząc wyniki do poprzedniego uruchomienia. Dlatego będziesz chciał użyć normalnej wersji polecenia tail zamiast zamiasttail -f
watch --beep
i zawinięcia ogona / grepa nadal nie dostałem sygnału).Możesz użyć sed, aby dodać control-G w następujący sposób:
lub tylko na rzadkich liniach, bez użycia grep, w następujący sposób:
który mówi: na liniach gdzie występuje czymś rzadkim, s ubstitute wszystko dla tej samej rzeczy z kontroli-G dołączona na końcu i drukuj (ale nie drukować linie niedopasowane). Działa świetnie!
źródło
Hm, trudne. Może moglibyśmy zrobić coś takiego?
Lub w twoim przypadku
Wygląda na to, że trochę buforuje. Sprawdzę, czy istnieje sposób na wyłączenie tego buforowania za pomocą
for
pętli.Najwyraźniej powinieneś być w stanie dostosować buforowanie potoku za pomocą,
ulimit -p
ale to wciąż narzeka na mnie nieprawidłowy argument. Znalazłem również post, który mówi, że musisz zmienić kompilację jądra, aby zmienić ten limit.źródło
W poprzednim zadaniu nie mogłem uzyskać niezawodnego obserwatora z samym Command-fu, więc miałem skrypt otoki taki jak ten poniżej, który sprawdzał plik co sekundę poll_duration i przeszukiwał nowe wiersze dla zainteresowanej frazy.
To było na maszynie uniksowej. W systemie Linux możesz przejść o jeden lepszy, używając interfejsu inotify filtru plików. Jeśli ten pakiet ( inotify-tools w Ubuntu) jest obecny, zamień
z
To wywołanie blokuje się, dopóki plik nie zostanie zmodyfikowany. Wersja blokująca jest prawie tak samo wydajna jak
tail -f
wersja, gdyby potok mógł zostać skonfigurowany do pracy bez buforowania.Uwaga: Skrypt najpierw
head --lines=$new_linecount
sprawdza, czy wiersze dodane do pliku po sprawdzeniu go nie przekrzywiają fragmentu pliku, który jest sprawdzany w tej pętli.źródło