2016-12-26 43 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