Я использую Ubuntu (Precise 12.04). Я пытаюсь написать скрипт bash, чтобы проверить, изменился ли файл с помощью замены awk с помощью команды diff.
Я провел тест со следующим:
#! /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 и capture в моем операторе 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