bash はファイルが変更されたかどうかを常に確認します。

bash はファイルが変更されたかどうかを常に確認します。

スクリプトで何かを実行するために使用し、変更があるたびに実際にビープ音を鳴らすfile1というファイルがあります。どうすればいいですか?

答え1

すでにinotify-toolsインストールしている場合(少なくともDebianのパッケージ名)、次のことができます。

while inotifywait -q -e modify filename >/dev/null; do
    echo "filename is changed"
    # do whatever else you need to do
done

これは、「filename」というファイルで「修正」イベントが発生するのを待ちます。これが発生すると、inotifywaitコマンド出力filename MODIFY(/ dev / nullに出力を送信して削除)が終了し、それによってループ本体が入力されます。

より多くの可能性については、マンページを読んでくださいinotifywait

答え2

inotifywaitなしでcronジョブでこの小さなスクリプトを使用できます(1分ごと)。

#!/usr/bin/env bash
#
# Provides      : Check if a file is changed
# 
# Limitations   : none
# Options       : none
# Requirements  : bash, md5sum, cut
# 
# Modified      : 11|07|2014
# Author        : ItsMe
# Reply to      : n/a in public
#
# Editor        : joe
#
#####################################
#
# OK - lets work
#

# what file do we want to monitor?
# I did not include commandline options
# but its easy to catch a command line option
# and replace the defaul given here
file=/foo/bar/nattebums/bla.txt

# path to file's saved md5sum
# I did not spend much effort in naming this file
# if you ahve to test multiple files
# so just use a commandline option and use the given
# file name like: filename=$(basename "$file")
fingerprintfile=/tmp/.bla.md5savefile

# does the file exist?
if [ ! -f $file ]
    then
        echo "ERROR: $file does not exist - aborting"
    exit 1
fi

# create the md5sum from the file to check
filemd5=`md5sum $file | cut -d " " -f1`

# check the md5 and
# show an error when we check an empty file
if [ -z $filemd5 ]
    then
        echo "The file is empty - aborting"
        exit 1
    else
        # pass silent
        :
fi

# do we have allready an saved fingerprint of this file?
if [ -f $fingerprintfile ]
    then
        # yup - get the saved md5
        savedmd5=`cat $fingerprintfile`

        # check again if its empty
        if [ -z $savedmd5 ]
            then
                echo "The file is empty - aborting"
                exit 1
        fi

        #compare the saved md5 with the one we have now
        if [ "$savedmd5" = "$filemd5" ]
            then
                # pass silent
                :
            else
                echo "File has been changed"

                # this does an beep on your pc speaker (probably)
                # you get this character when you do:
                # CTRL+V CTRL+G
                # this is a bit creepy so you can use the 'beep' command
                # of your distro
                # or run some command you want to
                echo 
        fi

fi

# save the current md5
# sure you don't have to do this when the file hasn't changed
# but you know I'm lazy and it works...
echo $filemd5 > $fingerprintfile

答え3

MacOSでラインを見つけてください。決定は次のとおりです。コンパイルと追加このツール私の道に行きます。これは30秒もかかりませんでした。

$ git clone [email protected]:sschober/kqwait.git
$ cd kqwait
$ make
$ mv kqwait ~/bin
$ chmod +x ~/bin/kqwait

次に、視聴したいディレクトリに移動します。この場合、Markdownファイルの変更を確認し、変更された場合make

$ while true; do kqwait doc/my_file.md; make; done

それはすべてです。

答え4

あなたは試すことができますentr次のコマンドラインツール

$ ls file1 | entr beep

関連情報