У меня здесь странная проблема. Я думаю, что я на 99%. У меня просто небольшой синтаксис и логическая ошибка где-то при попытке сделать следующее:Bash while loop sed replace
У меня есть файл манифеста с кучей сумм MD5. Не беспокойтесь, суммы просто для сравнения, а не для безопасности. Файл выглядит примерно так:
puppy.cfg=324327437483274834783204723
kitty.cfg=7893703274r0327403247032472
etc.
Функция «Манифест» вызывается и получает значение. Он получает имя файла, которое называется идентификатором (IDA). Затем функция вычисляет текущую сумму этого файла (IDA). Затем он просматривает каждую строку файла манифеста, пока не найдет соответствующий идентификатор файла (IDA = IDB). Когда он находит, что соответствующий ID сравнивает текущую сумму с суммой в файле манифеста (SUMA vs SUMB). Если нет разницы, функция просто закрывается и ничего не делает. Если он обнаруживает разницу, то функция «должна» обновлять файл манифеста «текущей» суммой. Эта часть функции в настоящее время не работает. Он делает что-то странное и смешивает переменные и ничего не меняет. Я знаю, что просто пропустил что-то простое. Может кто-нибудь помочь, пожалуйста?
function MANIFEST.CHECK {
local IDA="$1"
local SUMA=$(md5sum $1 | cut -d ' ' -f 1)
while read LINE; do
local IDB="`echo $LINE | cut -d"=" -f1`";
local SUMB="`echo $LINE | cut -d"=" -f2`";
if [ "$IDA" = "$IDB" ]; then
if [ ! "$SUMA" = "$SUMB" ]; then
while read LINE; do
sed "s%$SUMB%$IDA\=$SUMA%" var/manifest
done < <(grep -v '#' var/manifest)
echo "The file is/was different."
return
fi
fi
done < <(grep -v '#' var/manifest)
}
### START SCRIPT ###
MANIFEST.CHECK puppy.cfg
Просто проверяя, ожидали ли вы, что sed изменит файл «на месте» (то есть, как редактор)? Это не; он просто отправляет измененную копию в stdout. –
Это объясняет, почему я увидел выход «пюре». Хм, я не уверен, куда идти отсюда. Как бы вы порекомендовали заменить одну строку в файле. – Atomiklan