Движок блога в одном bash-скрипте на 1200 строк, и тред спорит: мастерство или безумие

Bashblog — это один Bash-файл без зависимостей, кроме date, grep и sed. Набери ./bb.sh post и пиши. Комментарии разошлись: длинный bash — это дисциплина или преступление против удобства разработчика.

Вкратце

Bashblog генерирует полноценный статический блог, RSS, теги и бэкапы из одного bash-скрипта примерно на 1200 строк, опираясь только на стандартные Unix-утилиты. Никакого рантайма ставить не надо, базы данных нет. У него 1,9 тыс. звёзд на GitHub.

Возражение было резким: один инженер заявил, что у bash после нескольких строк ноль преимуществ, а подсветка синтаксиса в редакторе ломается по всему файлу. Контрдовод пришёл от того, кто держит веб-серверы на 128 МБ ОЗУ, где тащить Python или Node — ровно та цена, которой ты пытаешься избежать.

Один файл, ноль рантайма: что такое Bashblog на самом деле

Карточка репозитория Bashblog
Карточка репозитория Bashblog

Bashblog — генератор статического блога, умещающийся в один Bash-скрипт примерно на 1200 строк. Его суть — в самой подаче: «Просто набери ./bb.sh post и начинай писать пост». Он выдаёт обычные HTML-файлы, без базы данных, и при этом покрывает RSS-ленты, теги и категории, черновики, опциональный Markdown, комментарии Disqus и автоматический бэкап при каждом посте.

Что ему демонстративно не нужно — так это рантайм. Он опирается только на стандартные Unix-утилиты (date, basename, grep, sed) и работает на Linux, BSD и macOS без GNU coreutils. У репозитория 1,9 тыс. звёзд и 238 форков, в духе UNIX: делать одну вещь хорошо.

Скриншот демо Bashblog
Скриншот демо Bashblog

Тред: дисциплина или преступление против удобства разработчика?

Самое громкое возражение в треде — что длинный bash просто плохой инструментарий:

«Не понимаю, зачем люди пишут bash-скрипты длиннее нескольких строк. Совершенно 0 преимуществ… даже подсветка синтаксиса у GitHub (и у VS Code) ломается во многих местах по всему скрипту.» — разработчик, который для любого из таких скриптов предпочёл бы Python

Он же проколол и защиту «без рантайма»: скрипт использует bash, а не sh, так что он не настолько переносим, как подразумевает подача. Сильнейший контрдовод назвал ту единственную нагрузку, где размен переворачивается:

«Я хочу держать веб-сервер на 128 МБ ОЗУ и диске в 1 ГБ… полезно просто пользоваться базовой системой.» — комментатор, который поднимает минимальные серверы

Он пошёл дальше, сравнив скептиков с теми, кто спрашивает, «зачем уметь пользоваться пилой, если есть бензопила», — беглость в своей оболочке сама по себе награда. FOSS-пурист поднял совсем другую тревогу:

«программа, которой я бы пользовался, если бы её распространяли в стандартном репозитории моей ОС, а не совершенно непроверенной на странице Microsoft GitHub случайного разработчика» — пользователь, называющий себя приверженцем FOSS-принципов

Ещё тред превратился в тихую перекличку тех, кто строил то же самое: переписывание на NodeJS, миграция на Jekyll, однострочник find … -exec pandoc и многолетний shell-блог с RSS и двумя языками. В этом и настоящая улика: bash-блог на 1200 строк — не инструмент, который большинство возьмёт на вооружение, а обряд посвящения, который удивительно много инженеров уже прошли и тихо отложили в сторону.

Получайте такие разборы каждый день

Главные истории Hacker News — на email, в Telegram или RSS.

Следующая новость · 26 из 34 Читать дальше
🚀Tech

Загрузчик клянётся, что DLL закреплена, но память с её кодом исчезла

Windows показывала combase.dll как загруженную и закреплённую, хотя байты с функцией CoTaskMemFree уже освободили. Вызов привёл к падению, а виноватым назначили shell32 — за труп, который освободил кто-то другой.

★ 135 · 💬 42 · devblogs.microsoft.com · 3 мин