這似乎是在某些版本的程序中的錯誤。
它爲我在Centos的7.3和Fedora 19
[vps1 ~]$ cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
[vps1 ~]$ getopt --name xyz --options "xyz:" -- -x -z
xyz: option requires an argument -- 'z'
-x --
[vps1 ~]$ getopt -V
getopt from util-linux 2.23.2
但它在我的MinGW殼(從Git的適用於Windows)
$ getopt --name xyz --options "xyz:" -- -x -z
getopt: option requires an argument -- z
-x --
$ getopt -V
getopt from util-linux 2.26.2
更新沒有的功能:它的工作原理也在Linux的2.27.1中。並且它在(至少某些版本的)Cygwin中不起作用。所以這個問題似乎出現在Windows端口(有趣的是Mingw和Cygwin)。
我會扔胡亂猜測(擊中目標的並不大概率): 的getopt
程序,因爲this commit嘗試處理一些environnments(特別是BSD; 不 Linux)的有/使用getprogname/setprogname
獲取/設置「當前」程序名稱(而不是依賴於argv[0]
)。
#if defined (HAVE_SETPROGNAME) && !defined (__linux__)
setprogname(name);
現在,讓我們想象一下,
- Cygwin和MinGW/MSI的都支持這些功能。
- 然而,他們缺乏
HAVE_SETPROGNAME
定義
- 此外,他們
getopt
功能(請注意,不是程序),就像BSD版本,使用getprogname
代替argv[0]
在這種情況下,問題會解釋。但是,我很懷疑 - 特別是第3點。
我從'cygwin的'util-linux 2.25.2' getopt。無論是最近的錯誤或Windows相關? –
相反,後來,我會說(更新)... – leonbloy
也許加入標籤cygwin和mingw來吸引一些開發者....? – leonbloy