파일이 실제로 변경되면 어떻게 파일을 덮어쓰고 명령을 실행합니까?

파일이 실제로 변경되면 어떻게 파일을 덮어쓰고 명령을 실행합니까?

기본적으로 명령을 실행하고 해당 출력을 파일로 캡처하고 싶습니다.

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

관련 정보