本质上我想运行一个命令并将其输出捕获到一个文件中:
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