2016-12-26 20 views
0

我有一个脚本,在3个主要步骤中执行一些任务。每一步都需要一些额外的参数,但取决于选择的步骤可能会有所不同。用户可以选择仅执行一些步骤,但不支持所有组合。我想告诉用户他们可以调用脚本的所有可能方式,但以简明的方式进行。如何在复杂的脚本中指定使用说明?

是在我脑海中的唯一正确的(即使用正确的符号指定了所有的可能性)方式,说明在所有不同的行明确变种:

./script -p [-d <arg>] 
./script -u -d <arg> 
./script -r -e <arg> -f <arg> -g|(-h <arg> -i <arg>) 
./script -pu [-d <arg>] 
./script -ur -d <arg> -e <arg> -f <arg> -g|(-h <arg> -i <arg>) 
./script -pur [-d <arg>] -e <arg> -f <arg> -g|(-h <arg> -i <arg>) 

但是,这是相当冗长。更糟糕的是,如果我在脚本中添加另一个步骤,我将不得不列出与该步骤相关的所有组合。

另一种方法我可以这样做是将所有参数列为可选参数(因为没有参数对于所有步骤都是强制的),但是这当然是不正确的(没有单个参数总是强制性的,但无论如何我们需要有提供了一些参数:

./script [-p] [-u] [-r] [-d <arg>] [-e <arg>] [-f <arg>] [-g|(-h <arg> -i <arg>)] 

坦率地说,我不知道哪一个更糟糕的是那么你会如何建议我写我的使用注意事项,可能的话,请提出一个通用?方法与许多脚本一样多选项将有这些问题。

回答

2

我从来不喜欢那些长期的使用线。虽然你可以争辩他们是必要的 他们并不真正意味着人类消费。我喜欢的 pacman documentation风格:

 
SYNOPSIS 
    pacman <operation> [options] [targets] 

OPERATIONS 
    -D, --database 
    Operate on the package database. 

    -Q, --query 
    Query the package database. 

OPTIONS 
    -b, --dbpath <path> 
    Specify an alternative database location (a typical default is 
    /var/lib/pacman). 

    -r, --root <path> 
    Specify an alternative installation root (default is /). 

EXAMPLES 
    pacman -Ss ne.hack 
    Search for regexp "ne.hack" in package database. 

    pacman -S gpm 
    Download and install gpm including dependencies. 

或者,如果你要消除歧义不同的使用方式,你可以像 的coreutils:

 
SYNOPSIS 
    ln [OPTION]... [-T] TARGET LINK_NAME (1st form) 
    ln [OPTION]... TARGET     (2nd form) 
    ln [OPTION]... TARGET... DIRECTORY  (3rd form) 
    ln [OPTION]... -t DIRECTORY TARGET... (4th form) 

SYNOPSIS 
    mv [OPTION]... [-T] SOURCE DEST 
    mv [OPTION]... SOURCE... DIRECTORY 
    mv [OPTION]... -t DIRECTORY SOURCE... 

SYNOPSIS 
    cp [OPTION]... [-T] SOURCE DEST 
    cp [OPTION]... SOURCE... DIRECTORY 
    cp [OPTION]... -t DIRECTORY SOURCE... 
+0

你能否详细说明一下'pacman'的做法?我不知道这个工具,但我不清楚它的文档背后的想法是什么。也有人**停止删除我的意见**。 – NPS