如果文件实际发生更改,如何覆盖文件并运行命令?

如果文件实际发生更改,如何覆盖文件并运行命令?

本质上我想运行一个命令并将其输出捕获到一个文件中:

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

使用一个简单的 shell 脚本怎么样?沙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

相关内容