저는 Ubuntu(정확한 12.04)를 사용하고 있습니다. diff 명령을 사용하여 awk 교체를 통해 파일이 변경되었는지 확인하기 위해 일부 bash 스크립트를 작성하려고 합니다.
나는 다음과 같이 테스트를 수행했습니다.
#! /bin/bash
diff fileA.htm fileB.htm &> /dev/null
if [ $? -ne 0 ]; then
echo "changed";
else
echo "not changed";
fi
작동하므로 아래와 같이 스크립트를 확장합니다.
#! /bin/bash
find . \( -name '*.htm' -o -name '*.html' \) \
-exec sh -c \
"awk '/START_TAG/{f=1;print;while (getline < \"REPLACEMENT_FILE.tmp\"){print}}/END_TAG/{f=0}!f' \"{}\" > \"{}.awk\"; diff \"{}\" \"{}.awk\" &> /dev/null; \
if [ $? -ne 0 ]; then\
echo \"{} changed\"; \
else \
echo \"{} not changed\"; \
fi" \;
awk가 작동하고 diff 명령도 작동하지만 diff &> /dev/null에서 출력을 가져오고 if 문에서 캡처할 수 없습니다.
find -exec 문 내에서 실행할 때 아마도 거기에서 뭔가를 변경해야 하지만 어떻게 해야 할지 잘 모르겠다고 가정합니다.
답변1
아래에서 수정된 버전의 문제를 발견한 것 같습니다.
#! /bin/bash
find . \( -name '*.htm' -o -name '*.html' \) \
-exec sh -c \
$'awk \'/START_TAG/{f=1;print;while (getline < \"REPLACEMENT_FILE.tmp\"){print}}/END_TAG/{f=0}!f\' \"{}\" > \"{}.awk\"; diff \"{}\" \"{}.awk\" &> /dev/null;\n \
if [ $? -ne 0 ]; then\n \
echo \"{} changed\";\n \
else\n \
echo \"{} not changed\";\n \
fi'\n \;
if else 문에 줄 바꿈을 추가해야 합니다.