使用例

使用例

ファイル内のコンテンツの変更を監視し、コンテンツが変更されたときに新しいテキストを表示する通知を生成したいと思います。

詳細

file(connection.txt)には単語のみが含まれているとします"You are connected to the internet"

ただし、コンピュータのインターネット接続が失われると、ファイルの内容が"You are now disconnected from the internet"

ファイルの内容を監視し、内容が変更されたときにのみデスクトップ通知に新しいテキストを表示するにはどうすればよいですか(Manjaroを使用しています)。

悪いことに、ファイルは4秒ごとに更新され、しばしばまったく同じテキストが含まれます。

私の研究

私はこの問題に対する解決策を見つけましたが、役に立ちませんでした。ファイルの作成、変更、削除など、ファイルやディレクトリイベントへの変更を監視するケースはたくさんありましたが、ファイル内のテキストをリアルタイムで監視するケースはありませんでした。

可能であれば、コマンド出力の変更を監視する同様の技術はありますか?

ベストアンサー1

ファイルを監視し、内容が変更されたときに新しいファイルの内容を含むデスクトップ通知のみを送信したい場合は、inotifywait(from inotify-tools)と-mオプション--monitorを使用してこの操作を無期限に実行できます。

--format "%e"次のコマンドはイベントタイプのみを印刷します。

notify-sendから図書館通知デスクトップ通知の場合、ファイルの内容が変更された場合にのみ通知を送信するために使用されます。

#!/bin/bash

f="filename"
curr=$(<"$f")

inotifywait -m -e modify "$f" --format "%e" | while read -r event; do
    if [ "$event" == "MODIFY" ]; then
        prev="$curr"
        curr=$(<"$f")
        [ "$curr" == "$prev" ] || notify-send "Title" "$curr"
    fi
done

特定のケースでは、「接続済み」や「接続が失われました」などのテキストを含むデスクトップ通知を表示することが目標である場合は、ファイルの変更を監視しません。ファイルからそのテキストを印刷する場所を次のように修正します(おっしゃるようにN秒ごとに)。

while true; do
    prev="$curr"
    curr=$( <here you output the new text> )
    [ "$curr" == "$prev" ] || notify-send "Title" "$curr"
    sleep 4
done

おすすめ記事