Có cách nào để làm cho đuôi -F bíp không?


23

Có cách nào để tạo tail -Fhoặc lesstiếng bíp (rung chuông trong thiết bị đầu cuối) khi dữ liệu mới xuất hiện (một dòng mới được thêm vào tệp). Hoặc có bất kỳ tiện ích unix nào khác để làm điều này trên linux hoặc mac.

Câu trả lời:


13

Một ý tưởng di chuyển là dẫn đầu ra của tailthông qua sedvà thay thế dòng mới bằng chuông / dòng mới.

Nhưng có một giải pháp dễ dàng hơn nếu bạn sử dụng tailtrong cửa sổ x . Ở đó bạn có thể thực hiện một hành động khi nội dung của cửa sổ thay đổi (nhấp nháy, chuông, bất cứ điều gì).


4
Đừng thay thế dòng mới, thêm nó ở cuối dòng.
Kevin

@Nils, sedÝ tưởng này rất tuyệt vời nhưng tôi không biết đủ 'sed' để làm cho nó hoạt động, có vẻ như tôi không thể nắm bắt được các dòng mới theo cách thông thường (mà tôi đã quen), tôi đoán tôi cần nói với sed không giải thích dòng dòng đến theo dòng.
Ali

5
@Ali Thật vậy, sed hành động theo từng dòng và bạn không trực tiếp nhìn thấy các dòng mới. sed -e $'s/$/\a/'thêm một $'\a'(ký tự chuông theo cú pháp ksh / bash / zsh) ở cuối mỗi dòng.
Gilles 'SO- ngừng trở nên xấu xa'

Cảm ơn @Gilles, đã làm việc như một lá bùa (trên máy mac quá)! sedregexpt là một chút kỳ lạ với đôi mắt ngây thơ của tôi.
Ali

1
@Gilles: Lưu ý rằng $'...'cú pháp không phổ biến. Ví dụ: [t] csh không hỗ trợ nó.
Keith Thompson

13

nếu bạn sử dụng GNU screen, bạn có thể đặt nó để "xem" cửa sổ bằng đuôi và nó sẽ cảnh báo bạn trên thanh trạng thái hoặc bằng chuông xác định của termcap của bạn, rằng có đầu ra mới trong cửa sổ đó.

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


chỉnh sửa: chỉ cần thêm điều này, vì bạn đã đề cập đến mac os x

chỉ để giải trí, nếu bạn đang tìm kiếm thứ gì đó đặc biệt, bạn có thể sử dụng saylệnh của Mac OS X để đọc cho bạn tệp bạn đang xem. chỉ cần nhận logtaillệnh, từ:

http://www.hmug.org/pub/MacOS_X/BSD/Ad dùng / Log / logcheck /

Và sử dụng nó trong một kịch bản như:

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

Cảm ơn @Tim ,, screenhiển thị và cảnh báo (Tôi đoán tôi cũng có thể làm cho nó rung chuông) CHỈ MỘT LẦN. Không phải cho mọi sự kiện mới xảy ra (không phải cho mọi dòng mới có sẵn)
Ali

1
tôi đã thêm một ví dụ cho mac có thể đọc tệp cho bạn. bạn có thể thay đổi nó để hoạt động cho linux bằng cách cài đặt phiên bản linux của logtail và sử dụng beeplệnh thay vì say.
Tim Kennedy

mát mẻ! Đó là sáng tạo, mặc dù trong trường hợp của tôi, tôi đang sử dụng tiếng bíp để có thể theo dõi tệp nhật ký mà không cần nhìn vào màn hình. Và tiếng bíp thực tế có thể tốt hơn giọng nói.
Ali

1
Cũng có thể sử dụng execlệnh của màn hình để làm điều đó là tốt. Ví dụ trong trang này !:sed -n s/.*Error.*/\007/psẽ gửi chuông mỗi lần "Lỗi" được hiển thị trong cửa sổ đó.
Arcege

Áp dụng tương tự cho Tmux.
0xC0000022L

10

Bạn có thể sử dụng multitail . Nó là một đuôi nâng cao hỗ trợ thực thi lệnh trên khớp biểu thức chính quy.

Ví dụ: lệnh sau phát âm thanh và mở cửa sổ xmessage mỗi khi gói tin nguồn martian được ghi lại.

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

4

Chỉ để ghi lại, như @Nils đề nghị tôi đang sử dụng sedđể thêm một belldòng vào mỗi dòng.

Các seddòng cung cấp bởi @Gilles

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

hoạt động trên máy mac của tôi (Tôi đã bật "chuông âm thanh" và "chuông hình ảnh" trong Terminal \ Preferences \ advanced).


Đáng chú ý là $'...'các chuỗi thoát là một điều duy nhất của Bash.
amphetamachine

@amphetamachine cảm ơn, trong khi bản thân tôi là người dùng bash, sẽ rất tuyệt nếu bạn hoặc người khác có thể thêm các phiên bản hoạt động trên các shell khác.
Ali

Tôi cũng là một người dùng bash, nhưng tôi đang dần học những gì sẽ và sẽ không hoạt động trong các shell khác.
amphetamachine

1

Đối với bất kỳ ai khác tìm thấy trang này, tôi đang sử dụng tcsh và điều này dường như hoạt động:

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

Đừng hỏi tôi cú pháp sed có nghĩa là gì ...


1
Tôi không thể tự giúp mình, tôi có thể hỏi, bạn có thể giải thích biểu hiện sed không?
Ashwani Agarwal

0

Bạn có thể thử konsolecho phép cảnh báo về hoạt động mới (hoặc im lặng) trong bất kỳ tab nào.


Tôi tưởng tượng konsolesẽ giống như screennó cảnh báo một lần, trong khi tôi cần nhận được thông báo cho mỗi dòng mới.
Ali
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.