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

Я предполагаю, что при запуске в операторе find -exec мне, вероятно, нужно что-то там изменить, но я не уверен, как это сделать.

1 ответ1

0

Я думаю, что нашел проблему, исправленная версия ниже:

#! /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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .