Как заставить ZSH автоматически перечитывать конфиг

Опубликовано 11 дек. 2025 г.

Привет, сегодня будем учить zsh автоматически перечитывать конфиг после изменения.

ЧИТАТЬ ПЕРВЫМ В ТЕЛЕГРАМ   ЧИТАТЬ ПЕРВЫМ В MAX

Каждый раз заёбисто делать source ~/.zhsrc после очередных изменений, да и плагинов я актуальных найти так и не смог.

По-хорошему можно было бы и плагин для сообщества накидать, но я ленивая скотина и обошелся Bash скриптом.

Поэтому открываем ~/.zshrc и пихаем в него такое:

ZSH_LAST_MOD=$(stat -c %Y ~/.zshrc 2>/dev/null || stat -f %m ~/.zshrc)
precmd() {
  local new_mod=$(stat -c %Y ~/.zshrc 2>/dev/null || stat -f %m ~/.zshrc)
  if [[ $new_mod != $ZSH_LAST_MOD ]]; then
    if zsh -n ~/.zshrc; then
      source ~/.zshrc
      ZSH_LAST_MOD=$new_mod
      echo "🔄 .zshrc auto-reloaded (OK)"
    else
      echo "⚠️ .zshrc has syntax errors — reload skipped"
    fi
  fi
}

Теперь после каждого изменения файла ~/.zshrc конфиг будет автоматически перечитан. НО перечитан он будет только после проверки, если ты своими кривыми руками где-то накосорезил — идешь нахуй. Логично? Логично!

Как это работает:

  1. Сохраняет timestamp последней модификации .zshrc

  2. precmd() — специальная функция zsh, которая автоматически вызывается перед каждым выводом prompt (после любой команды или Enter). Вызывается незаметно, идеально для фоновых проверок без вмешательства в работу.

  3. Дальше логика, сравнивает timestamps — если .zshrc отредактирован и сохранен, переходит к проверке.

  4. zsh -n файл — проверяет синтаксис без выполнения (no-execute mode). Возвращает 0 при успехе, > 0 при ошибках (дубликаты, незакрытые скобки и т.п.).

  5. Ну а дальше сообщает тебе, все ок или идешь нахуй.​

Нюанс:

echo 'syntax error' >> ~/.zshrc

/home/user/.zshrc:226: command not found: syntax
🔄 .zshrc auto-reloaded (OK)

Проблема в том, что zsh -n проверяет только синтаксис (скобки, конструкции), но не выполнение команд. Имей это ввиду.

Если сделать так:

echo '# syntax error' >> ~/.zshrc
🔄 .zshrc auto-reloaded (OK)

То всё пройдёт замечательно. Ну ты понял к чему я клоню.

Тема прикольная, экспериментируй.

Комментарии