Самое интересное в представленной функции — она стала не нужна ещё на стадии внедрения. Затирать не стал. Зачем пропадать добру? Может кому-то из читателей потребуется скрипт с функцией самообновления…
В последствии весь функционал обновления был переписан и преобразован в api http-сервера с целью получения целого ряда скриптов. Пока что — функция update_script:
update_script()
{
local url="$1"
local temp_file="$2"
echo "Проверка обновлений..."
# Скачивание нового скрипта #
curl -s -o "$temp_file" "$url"
if [ $? -ne 0 ]; then
echo "Ошибка: Не удалось загрузить скрипт."
return 1
fi
# Получение хэш-суммы текущего и нового скрипта #
local local_hash
local remote_hash
local current_script="$0"
# Хэш текущего скрипта #
local_hash=$(sha256sum "$current_script" | cut -d ' ' -f 1)
# Хэш нового скрипта #
remote_hash=$(sha256sum "$temp_file" | cut -d ' ' -f 1)
# Сравнение хэшей #
if [ "$local_hash" == "$remote_hash" ]; then
echo "Скрипты идентичны. Обновление не требуется."
rm "$temp_file"
return 0
else
echo "Найдена новая версия скрипта. Обновление..."
mv "$temp_file" "$current_script"
chmod +x "$current_script"
echo "Скрипт обновлен. Перезапустите его для применения изменений."
exit 0
fi
}
Достаточно скопипастить функцию в тело скрипта и вызвать там, где потребуется:
# URL для скачивания новой версии скрипта # SCRIPT_URL="http://192.168.1.100/scripts/test.sh" # Временный файл для скачанного скрипта # TEMP_SCRIPT="/scripts/temp.sh" # Вызов функции обновления # update_script "$SCRIPT_URL" "$TEMP_SCRIPT"
Обращаю внимание, что функция принимает два параметра — url с адресом скрипта и путь с локальным расположением. Дальше уже в дело вступит магия сравнения контрольных сумм и всякое такое.