В bash нет настоящих транзакций. Но что, если тебе нужно выполнить серию изменений, и в случае ошибки все откатить обратно? Это возможно - через копии, trap, проверку ошибок и откат действий вручную.
▪️ Пример: изменение конфигов с возможностью отмены
#!/bin/bash
set -euo pipefail
CONFIG="/etc/myapp/config.conf"
BACKUP="/tmp/config.conf.bak.$RANDOM"
# Создаём резервную копию
cp "$CONFIG" "$BACKUP"
# Обработчик при ошибке
rollback() {
echo "Ошибка! Откатываем изменения..."
cp "$BACKUP" "$CONFIG"
echo "Конфиг восстановлен."
}
trap rollback ERR
echo "Обновляем конфиг..."
# Имитация изменения
echo "enable_feature=true" >> "$CONFIG"
# Имитация ошибки
false # или команда, которая может упасть
echo "Конфиг успешно обновлён"
rm "$BACKUP"
▪️ Объяснение:
📍
trap rollback ERR - ловит любую ошибку📍
set -euo pipefail - строгий режим, ошибки не скрываются📍 Копия - это наша "точка восстановления"
📍 После успешного выполнения - копия удаляется
▪️ Применение:
Обновление конфигов
Копирование и изменение сервисных файлов
Манипуляции с crontab, systemd, hosts, fstab
Авторазвертывание с откатом при сбое
Это простая, но классная техника: bash-транзакции как ручной аналог ACID.
BashTex 📱 #bash #utils