Відображення коментарів щодо використання у функціях, призначених для інтерактивного використання


11

У мене є ряд функцій, визначених у моїх .bashrc, призначених для інтерактивного використання в терміналі. Я, як правило, передував їм із коментарем із описом його використання:

# Usage: foo [bar]
# Foo's a bar into a baz
foo() {
  ...
}

Це добре, якщо переглядати вихідний код, але приємно запустити typeв терміналі, щоб отримати швидке нагадування про те, що функція виконує. Однак це (зрозуміло) не включає коментарі:

$ type foo
foo is a function
foo ()
{
    ...
}

Що наштовхнуло мене на думку "чи не було б добре, якби такі коментарі зберігалися, щоб вони typeмогли відображати їх?" І в дусі доктрин Пітона я придумав це:

foo() {
  : Usage: foo [bar]
  : "Foo's a bar into a baz"
  ...
}

$ type foo
foo is a function
foo ()
{
    : Usage: foo [bar];
    : "Foo's a bar into a baz";
    ...
}

Тепер використання включено прямо у typeвисновок! Звичайно, як ви бачите, цитування стає проблемою, яка може бути схильною до помилок, але приємніше користувацьке враження, коли воно працює.

Тож моє запитання: чи це жахлива ідея? Чи є кращі альтернативи (як-от man/ infoдля функцій) для надання користувачам функцій Bash додатковий контекст?

В ідеалі я все-таки хотів би, щоб інструкції з використання розташовувалися поблизу визначення функції, щоб люди, які переглядають вихідний код, також отримували перевагу, але якщо є "належний" спосіб зробити це, я відкритий для альтернатив.

Відредагуйте це всі досить прості функції помічників, і я просто хочу інтерактивно отримати трохи додаткового контексту. Безумовно, для складніших сценаріїв, які розбирають прапори, я б додав --helpваріант, але для них було б дещо обтяжливим додавати прапори довідки до всього. Можливо, це лише вартість, яку я повинен прийняти, але, :здається , цей злом працює досить добре, не ускладнюючи джерело набагато важче для читання нашої редакції.

Відповіді:


8

Я не думаю, що існує лише один хороший спосіб зробити це.

Багато функцій, сценаріїв та інших виконуваних файлів надають довідкове повідомлення, якщо користувач надає -hабо --helpяк варіант:

$ foo() {
[[ "$1" =~ (-h|--help) ]] && { cat <<EOF
Usage: foo [bar]
Foo's a bar into a baz
EOF
return;
}
: ...other stuff...
}

Наприклад:

$ foo -h
Usage: foo [bar]
Foo's a bar into a baz

$ foo --help
Usage: foo [bar]
Foo's a bar into a baz

Так, я повинен був це сказати. Це прості функції, і я намагаюся уникати їх надмірно складних. Для команд, які заслуговують на розбір прапорів, я безумовно додав би --helpваріант.
dimo414

У програмуванні послідовність - це чеснота. Також це залежить від того, що ви маєте на увазі під "складним".
John1024

І ваш підхід розумний і хороший (і у вашого питання вже є мій +1).
John1024

1
Спасибі; Ваша реалізація --helpтакож неінвазивна, що, на мою думку, є головним критерієм у цьому випадку. Я можу в кінцевому підсумку використовувати :трюк, оскільки він більше відповідає моєму використанню, але я вдячний, що ви зазначили, що це не важко підтримати --helpі що більшість користувачів очікують цього.
dimo414

1
+1. я збирався відповісти "використовувати getopts", але це працює досить добре, якщо немає інших варіантів. якщо функція має інші опції, скористайтеся getopts.
cas
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.