2011-08-15 64 views
4

到目前爲止,我一直在使用getopt_long來解析命令行C程序的選項。處理C中參數前後的命令行選項

有沒有辦法阻止getopt_long解析時,它遇到了非選項參數?如果沒有,在C中處理這個問題的最好方法是什麼?

舉個例子,我想以同樣的方式來處理命令git,並且命令之前有一般的參數,並在其後的特定命令的參數:

git [general options] <command> [command options] 

如:

git --bare commit -a 
git -p --bare status -s 

-p--bare是一般選項,並且可以與所有的命令使用,而-a是特定於commit命令,-s特定到status命令。

使用getopt_long將嘗試首先解析所有選項,然後保留非選項參數。理想情況下,我希望一旦遇到非選項(即命令)就停止解析,然後將其餘參數傳遞給特定於命令的選項解析器。

回答

6

的GNU的Getopt手冊說:

POSIX要求的以下行爲:第一個非選項阻止了選項處理。通過設置環境變量POSIXLY_CORRECT或使用加號('+')開始選項參數字符串來選擇此模式。

+1

+1。有趣的是,這是如何出現在「Linux程序員手冊」中的,即Linux手冊頁,而不是在「authorative」[Glibc手冊]中(http://www.gnu.org/s/libc/manual/html_node/Getopt-Long- Options.html#的Getopt龍 - 選項)。 –

+0

謝謝,完美的作品。我一直盯着getopt_long文檔來看太久,在'man getopt'上不夠用! –