2009-03-26 5 views
22

Esiste una convenzione per documentare i parametri degli script di shell?che documenta i parametri degli script di shell

Ad esempio:

#!/usr/bin/env bash 

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

Un paio di cose che non mi piacciono di questo particolare modello:

  • nome del file dello script (myScript) appare all'interno del file stesso descrizione
  • parametro sembra strano
  • lo spazio iniziale prima di $ è visivamente utile, ma può portare a confusione nelle lingue con commenti di blocco, causando alcuni strumenti di convalida per lamentarsi di indentazione mista/incongruente (ad es. spazi in questo blocco, schede per codice - purché uno preferisca schede, ovviamente)

Ci sono delle linee guida su questo?

+0

pagine 'man' per la formattazione ed esempi di documentazione dei parametri: https://unix.stackexchange.com/questions/6891/how-can-i-add-man-page-entries-for-my-own-power -tools –

risposta

3

avrei preferito scrivere:

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

provare a guardare il modo in cui l'aiuto è formattato per utilità standard UNIX (ls --help, per esempio)

2

Consiglierei di effettuare automaticamente lo script di stampa utilizzo (se non dovrebbe essere eseguito senza argomenti):

#!/usr/bin/env bash 

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

Puoi usare '$ #' come scorciatoia per il conteggio degli argomenti. –

7

Il Vim bash IDE che fa questo:

#!/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, sembra la sezione di identificazione del programma COBOL. * Brividi *. – ashawley

+1

Che sembra interessante - lo prenderò in considerazione, grazie! (Anche se il problema con i commenti su più righe - come in heredoc - rimane.) – AnC

+0

Io uso sempre "#:" per questo _meta-comments_ così posso separarli dai commenti di implementazione. – leogtzr

11

solito avvolgere il mio utilizzo in funzione, in modo che posso chiamare da un -h param ecc

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

EOM 
    exit 0 
} 

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

Ho corretto il documento qui per te indentando lo script. Non capisco il [-x $ 1] (se il primo argomento non è il percorso di un file eseguibile, produrre l'uso?); anche le parentesi e il punto e virgola attorno all'invocazione sono ridondanti. –

+0

Doh, non ha notato la x; cambiato alla z che voleva essere. – Eddy

+0

Immagino che le parentesi siano abitudine quindi posso includere un messaggio di errore insieme al controllo a seconda del controllo. Grazie per il trucco del codice indentato! – Eddy

22

Tradizionalmente documentare i vostri argomenti nella funzione di utilizzo():

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

Grazie a tutti per le loro risposte. Sebbene siano tutti abbastanza specifici di Bash, sono comunque utili. Dovrò pensare a come implementarlo al meglio (come uno schema comune) in Python, Perl, Ruby ecc. – AnC

+0

Dopo aver pensato un po 'di più, è necessaria anche la documentazione in-code, poiché serve un scopo leggermente diverso. Quindi adotterò le informazioni sull'utilizzo automatico, ma apprezzerei comunque alcuni consigli sul problema originale. – AnC

4

io lo consiglio con un heredoc:

usage() { 
    cat <<HELP_USAGE 

    $0 [-a] -f <file> 

    -a All the instances. 
    -f File to write all the log lines 
HELP_USAGE 
} 

invece di:

echo "$0 [-a] -f <file>" 
echo 
echo "-a All the instances." 
echo "-f File to write all the log lines." 

ritengo sia modo più pulito di tutti questi eco linee.