документирование параметров скриптов оболочки - PullRequest
40 голосов
/ 27 марта 2009

Существует ли соглашение для документирования параметров сценариев оболочки?

Например:

#!/usr/bin/env bash

# <description>
#
# Usage:
#  $ ./myScript param1 [param2]
# * param1: <description>
# * param2: <description>

Несколько вещей, которые мне не нравятся в этом конкретном шаблоне:

  • имя файла скрипта (myScript) появляется внутри самого файла
  • описание параметра кажется странным
  • начальный пробел перед $ полезен визуально, но может привести к путанице в языках с комментариями к блоку, в результате чего некоторые инструменты проверки будут жаловаться на смешанные / несоответствующие отступы (например, пробелы в этом блоке, вкладки для кода - при условии, что один предпочитает) вкладки, конечно)

Есть ли какие-либо рекомендации по этому вопросу?

Ответы [ 6 ]

34 голосов
/ 27 марта 2009

Традиционно вы документируете свои аргументы в функции using ():

#!/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
17 голосов
/ 27 марта 2009

Я обычно оборачиваю свое использование в функции, чтобы я мог вызвать его из параметра -h и т. Д.

#!/bin/bash
usage() {
    cat <<EOM
    Usage:
    $(basename $0) Explain options here

EOM
    exit 0
}

[ -z $1 ] && { usage; }
12 голосов
/ 14 ноября 2016

Я бы порекомендовал использовать 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."

Я думаю, это намного чище, чем все эти эхо строк.

10 голосов
/ 27 марта 2009

Vim bash IDE , которая делает это:

#!/bin/bash
#===============================================================================
#
#          FILE:  test.sh
#
#         USAGE:  ./test.sh
#
#   DESCRIPTION:
#
#       OPTIONS:  ---
#  REQUIREMENTS:  ---
#          BUGS:  ---
#         NOTES:  ---
#        AUTHOR:  Joe Brockmeier, jzb@zonker.net
#       COMPANY:  Dissociated Press
#       VERSION:  1.0
#       CREATED:  05/25/2007 10:31:01 PM MDT
#      REVISION:  ---
#===============================================================================
3 голосов
/ 27 марта 2009

Я бы лучше написал:

Usage: `basename $0` [option1]|[option2] param1
  Options:
   - option1:  .....
   - option2:  .....
  Parameters:
   - param1:   ..... 

Попробуйте посмотреть, как форматируется справка для стандартных утилит UNIX (например, ls --help)

2 голосов
/ 27 марта 2009

Я бы порекомендовал сделать так, чтобы ваш скрипт автоматически печатал использование (если его нельзя запускать без аргументов):

#!/usr/bin/env bash

if [ ${#@} == 0 ]; then
    echo "Usage: $0 param1 [param2]"
    echo "* param1: <description>"
    echo "* param2: <description>"
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...