Бывало такое: запускаете скрипт настройки сервера, а он орёт «пакет уже установлен» и падает? Или молча дублирует конфиги, а потом всё едет? Идемпотентность - это когда повторяете одно и то же действие много раз, а результат не меняется. Как выключатель: щёлкайте сколько угодно - свет либо включится, либо выключится. Без дыма и искр. ➤ Три функции, которые спасут ваши нервы Кладёте в начало любого скрипта - и спите спокойно: #!/bin/bash set -euo pipefail # Ставим пакет, только если его нет ensure_pkg() { dpkg -s "$1" &>/dev/null && { echo "$1 уже стоит"; return 0; } echo "Ставим $1..." apt-get install -y "$1" } # Добавляем строку в файл, только если её там нет ensure_line() { grep -qxF "$1" "$2" 2>/dev/null && { echo "Строка уже есть в $2"; return 0; } echo "$1" | tee -a "$2" } # Запускаем сервис, только если он не крутится ensure_svc() { systemctl is-active --quiet "$1" && { echo "$1 уже работает"; return 0; } systemctl start "$1" && systemctl enable "$1" } Логика простая: с
Скрипт, который не ломается на втором запуске
7 мая7 мая
1 мин