Johnman.md

プログラミングのことや個人的なことを書きます。たぶん。

ファイルの変更を監視してコマンドを実行するスクリプト

openssl sha256 コマンドでファイルのハッシュ値を生成し、それが変わっていたら引数で指定したコマンドを実行するスクリプト

何気に初めて自分で使うためにシェルスクリプトを書きました。

スクリプト

#!/bin/bash

function __usage() {
  cat <<EOS
  usage: $(basename $0) <target filename> <command>
EOS
}

__check() {
  echo `openssl sha256 -r $1 | awk '{print $1}'`
}

if [ $# -ne 2 ]; then
  __usage
  exit 1
fi

echo "watching: $1"
INTERVAL=1 # second
last=`__check $1`
while true; do
  sleep $INTERVAL
  current=`__check $1`
  if [ "$last" != "$current" ]; then
    echo 'execute...'
    eval $2
    last=$current
    echo 'done'
  fi
done

使い方

./watch.sh filename 'command'

ぼくの場合はwebpack --watch でビルドされたファイルをローカルサーバを立ててる別のディレクトリにコピーして画面に反映させるために使いました。

参考にした記事

ファイルの変更を定期的に監視して、特定のコマンドを実行するシェルスクリプト - Qiita

指定したファイルの更新があったらコマンドを自動実行するシェルスクリプト - 午睡二時四十分