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

Texmaker - это приложение с графическим пользовательским интерфейсом, предназначенное для использования как таковое. Вместо этого вы можете просто запустить Texmaker, а затем открыть нужный файл .tex из приложения. Это можно сделать с помощью комбинации клавиш Ctrl + O.

11
11.07.2016, 01:13
2 ответа

Я не думаю, что есть только один хороший способ сделать это.

Многие функции, сценарии и другие исполняемые файлы предоставляют справочное сообщение, если пользователь предоставляет -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
8
27.01.2020, 19:59

Я так и не полностью убедил себя сделать решительный шаг и использовать :команды в качестве псевдо--комментариев. В частности, меня всегда беспокоил тот факт, что «комментарии» на самом деле являются аргументами, которые оцениваются и потенциально могут иметь побочные -эффекты (или просто ломать что-то, например ошибочное'). Мне все еще нравится простота идеи, но я никогда не находил компромисс вполне оправданным.

Мои сомнения по поводу предоставления текста использования с помощью флага --helpили подобного всегда были неприятным моментом, который сопровождал это.Как только вы начинаете принимать флаги, вы быстро переходите к полноценному -разбору аргументов, который обычно (в Bash )требует довольно большого количества шаблонов .

Чтобы частично восполнить этот пробел, я собрал небольшую утилиту , которая обертывает getopts, чтобы уменьшить этот шаблон. Он по-прежнему занимает несколько строк, поэтому я бы не стал использовать его в крошечных -функциях, но это гораздо более лаконично, чем прямое использование getopts. Вот пример использования с флагом -h(getoptsподдерживает только однобуквенные опции -):

foo() {
  local _usage='foo [-a] [-b] [-f val] [-v val] [args...]'
  eval "$(parse_opts 'f:v:abh')"
  if (( h )); then
    echo "Usage: $_usage"
    return 0
  fi
  echo "f=$f v=$v a=$a b=$b -- $#: $*"
}
0
13.04.2020, 10:26

Теги

Похожие вопросы