기본적으로 명령을 실행하고 해당 출력을 파일로 캡처하고 싶습니다.
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