ファイルが実際に変更された場合、どのようにファイルを上書きしてコマンドを実行しますか?

ファイルが実際に変更された場合、どのようにファイルを上書きしてコマンドを実行しますか?

基本的にコマンドを実行し、その出力をファイルにキャプチャしたいと思います。

some_cmd > /etc/myservice.conf

内容が変わったら別のコマンドを実行したいと思います。

systemctl myservice reload

文字通り何の違いもなく実行する必要があります。

  • 同じデータ、異なる順序
  • ファイルがまだ存在しないか空です。
  • 最後に改行を追加してください。
  • 新しいファイルが空です。

私は次のようにtee考えていました。

echo "value=1" | overwritediff /etc/myservice.conf && systemctl myservice reload

一時ファイルでこれを行うことができますがdiff、よりきれいな方法があるかどうか疑問に思います。答えが「いいえ、スクリプトを書いてください」なら、それも大丈夫です。


それ以外の場合は、次のようにします。

some_cmd > /tmp/myservice.conf

diff /etc/myservice.conf /tmp/myservice.conf || (
  mv /tmp/myservice.conf /etc/myservice.conf && systemctl myservice reload
)

ベストアンサー1

単純なシェルスクリプトを使うのはどうですか?シャー1合

#!/bin/bash

VALUE=$1
FILE=$2

SUM1=$(sha1sum $FILE)
echo "value=$VALUE" > $FILE
SUM2=$(sha1sum $FILE)

if [[ ! $SUM1 == $SUM2 ]]; then
  echo "Different" #put your command here
fi

実行時:

nxr ~ touch filetest
nxr ~ bash sumtest.sh 1 filetest
-> Different
nxr ~ bash sumtest.sh 1 filetest
->
nxr ~ bash sumtest.sh 2 filetest
-> Different

おすすめ記事