2012-08-28 19 views
6

我想讓我的bash腳本處理長參數。我發現getopt,但在OS X中不支持。誰能告訴我爲什麼getopt是由BSD實現的,但不是GNU? 我嘗試在GNU C庫中構建getopt,但是由於我的Linux技能不佳,失敗了。如何使用mac中的「getopt」命令讓bash處理長參數?

有沒有人從事這項工作?

+0

可能重複shell腳本來獲取長和短命令行選項](http://stackoverflow.com/questions/402377/using-getopts-in-bash-shell-script-to-get-long-and-short-command-line-選項) – ghoti

回答

1

改爲使用getopts通常是一個更好的主意,並堅持使用較短的選項。你可以在this StackOverflow Q&A中看到getopts的行動。在OSX命令行工具中,短選項更爲標準,一致性是一件好事。

此外,getopts內置於bash中,所以它在OSX以及其他可以運行bash的平臺中都是可用的。

請注意,在OSX中也有一個getopt。從終端輸入man getopt以查看其文檔。它不支持長期選項。這是在編寫工具在OSX上運行時不使用長選項的好理由。

如果你想這樣做,你可以從macports安裝getopt。另外,如果你想要更好的可移植性,你可以推出自己的長參數處理。

發佈一些代碼,我們將幫助調試它。

10

有一個brew bottle for getopt

只要運行brew install gnu-getopt

您可以指定它的路徑就像 /usr/local/Cellar/gnu-getopt/1.1.6/bin/getopt

或者使用brew link --force gnu-getopt所以它會在/usr/local/bin/

鏈接要知道,迫使聯可能會破壞你的系統(因爲它會替換系統getn by gnu one)。

0

我建議使用自制安裝gnu-getopt,然後加入$FLAGS_GETOPT_CMD~/.bash_profile文件來指定的getopt cmd的路徑,在自制的位置指示,像這樣:的[使用在bash getopts的

brew install gnu-getopt 
sudo echo 'export FLAGS_GETOPT_CMD="$(brew --prefix gnu-getopt)/bin/getopt"' >> ~/.bash_profile 
. ~/.bash_profile 
+0

我喜歡人們如何downvote,但提供ZERO評論爲什麼... tsk tsk – sMyles