2009-03-26 4 views
22

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

Например:

#!/usr/bin/env bash 

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

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

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

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

+0

'man' страницы для форматирования и примеры документации параметров: https://unix.stackexchange.com/questions/6891/how-can-i-add-man-page-entries-for-my-own-power -tools –

ответ

3

Я предпочел бы написать:

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

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

2

Я рекомендовал бы сделать сценарий автоматически печати использование (если он не должен быть запущен без аргументов):

#!/usr/bin/env bash 

if [ ${#@} == 0 ]; then 
    echo "Usage: $0 param1 [param2]" 
    echo "* param1: <description>" 
    echo "* param2: <description>" 
fi 
+3

Вы можете использовать '$ #' как ярлык для подсчета аргументов. –

7

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: --- 
#=============================================================================== 
+7

Ugh, выглядит как идентификационный раздел программы COBOL. * Вздрагивает *. – ashawley

+1

Что выглядит интересно - рассмотрим это, спасибо! (Хотя проблема с многострочными комментариями - как в heredoc - остается.) – AnC

+0

Я всегда использую «#:» для этого _meta-comments_, поэтому я могу отделить их от комментариев реализации. – leogtzr

11

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

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

EOM 
    exit 0 
} 

[ -z $1 ] && { usage; } 
+0

Я установил здесь документ для вас, отступы от сценария. Я не понимаю [-x $ 1] (если первый аргумент - это не путь к исполняемому файлу, производящий использование?); скобки и точки с запятой вокруг вызова также избыточны. –

+0

Дох, не заметил х; изменил его на z, которым он хотел быть. – Eddy

+0

Я предполагаю, что скобки являются привычкой, поэтому я могу включить сообщение об ошибке вместе с проверкой в ​​зависимости от проверки. Спасибо за трюк с отступом! – Eddy

22

Традиционно документировать свои аргументы в использовании() функция:

#!/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 
+1

Спасибо всем за их ответы. Хотя все они достаточно специфичны для Bash, они все же полезны. Мне нужно подумать о том, как наилучшим образом реализовать это (как общий шаблон) в Python, Perl, Ruby и т. Д. – AnC

+0

Если подумать об этом немного, необходима документация в коде, так как она служит немного другое назначение. Итак, я приму автоматическую информацию об использовании, но по-прежнему буду признателен за некоторые советы по оригинальной проблеме. – AnC

4

я рекомендую используя 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." 

Я думаю, что это путь чище, чем все эти эхо линии.

Смежные вопросы