TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #254 1.55K
Автогенерация help/usage в Bash

Одна из лучших практик при написании bash-утилит - добавлять --help, чтобы объяснять, как работает скрипт. Но зачем дублировать описание в заголовке и в коде, если можно использовать один и тот же блок? С помощью cat <<EOF и sed можно генерировать справку прямо из комментариев скрипта.

🛠 Пример структуры скрипта:


#!/bin/bash

: <<'USAGE'
my-script.sh - полезный инструмент

Использование:
./my-script.sh [опции]

Опции:
-h показать помощь
-f FILE указать файл
-v включить подробный вывод

Пример:
./my-script.sh -f config.ini -v
USAGE

# Генерация help из заголовка
show_help() {
sed -n "/^: <<'USAGE'/,/^USAGE/p" "$0" | sed '1d;$d'
}

while getopts ":hf:v" opt; do
case $opt in
h) show_help; exit 0 ;;
f) FILE=$OPTARG ;;
v) VERBOSE=1 ;;
\?) echo "Неверный флаг: -$OPTARG" >&2; show_help; exit 1 ;;
esac
done


⭐️ Как это работает?

📍 : <<'USAGE' ... USAGE - это многострочный комментарий.
📍 sed -n '/^: <<'\''USAGE'\''/,/^USAGE/p' "$0" - извлекает его.
📍 В show_help() мы красиво выводим только нужный блок.


Теперь ты всегда видишь usage в начале файла - и это единственный источник правды.

BashTex 📱 #bash #utils
  • 👍 9
  • 🔥 1
More from @bash_tex
  1. Oct 13, 2026openat2(): как Linux защищает от выхода за пределы каталога Допустим, приложение должно чи…
  2. Oct 12, 2026xargs против while read: где быстрее и безопаснее Обе конструкции позволяют обработать спи…
  3. Oct 9, 2026BashTex 📱 #мем
  4. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  5. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  6. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →