Документирование параметров сценариев оболочки
Есть ли соглашение для документирования параметров сценариев оболочки?
Например:
#!/usr/bin/env bash
# <description>
#
# Usage:
# $ ./myScript param1 [param2]
# * param1: <description>
# * param2: <description>
Несколько вещей, которые мне не нравятся в этом конкретном шаблоне:
- имя файла script (
myScript
) появляется внутри самого файла
- описание параметра кажется странным
- ведущее пространство до
$
визуально полезно, но может привести к путанице в языках с комментариями блоков, в результате чего некоторые инструменты проверки могут жаловаться на смешение/несоответствие отступов (например, пробелы в этом блоке, вкладки для кода - если один предпочитает вкладки, конечно)
Есть ли какие-либо рекомендации по этому вопросу?
Ответы
Ответ 1
Традиционно вы документируете свои аргументы в функции usage():
#!/bin/bash
programname=$0
function usage {
echo "usage: $programname [-abch] [-f infile] [-o outfile]"
echo " -a turn on feature a"
echo " -b turn on feature b"
echo " -c turn on feature c"
echo " -h display help"
echo " -f infile specify input file infile"
echo " -o outfile specify output file outfile"
exit 1
}
usage
Ответ 2
Обычно я обертываю свое использование в функции, поэтому я могу вызвать его из -h param и т.д.
#!/bin/bash
usage() {
cat <<EOM
Usage:
$(basename $0) Explain options here
EOM
exit 0
}
[ -z $1 ] && { usage; }
Ответ 3
Vim bash IDE, который делает это:
#!/bin/bash
#===============================================================================
#
# FILE: test.sh
#
# USAGE: ./test.sh
#
# DESCRIPTION:
#
# OPTIONS: ---
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: Joe Brockmeier, [email protected]
# COMPANY: Dissociated Press
# VERSION: 1.0
# CREATED: 05/25/2007 10:31:01 PM MDT
# REVISION: ---
#===============================================================================
Ответ 4
Я бы предпочел написать:
Usage: `basename $0` [option1]|[option2] param1
Options:
- option1: .....
- option2: .....
Parameters:
- param1: .....
Попробуйте посмотреть, как справка отформатирована для стандартных утилит UNIX (например, ls --help)
Ответ 5
Я бы рекомендовал автоматически использовать ваше использование script (если оно не должно запускаться без аргументов):
#!/usr/bin/env bash
if [ ${#@} == 0 ]; then
echo "Usage: $0 param1 [param2]"
echo "* param1: <description>"
echo "* param2: <description>"
fi
Ответ 6
Я бы recomment с помощью heredoc:
usage () {
cat <<HELP_USAGE
$0 [-a] -f <file>
-a All the instances.
-f File to write all the log lines
HELP_USAGE
}
вместо:
echo "$0 [-a] -f <file>"
echo
echo "-a All the instances."
echo "-f File to write all the log lines."
Я думаю, что он чище, чем все эти эхо-линии.