我想讓我的bash腳本處理長參數。我發現getopt
,但在OS X中不支持。誰能告訴我爲什麼getopt
是由BSD實現的,但不是GNU? 我嘗試在GNU C庫中構建getopt
,但是由於我的Linux技能不佳,失敗了。如何使用mac中的「getopt」命令讓bash處理長參數?
有沒有人從事這項工作?
我想讓我的bash腳本處理長參數。我發現getopt
,但在OS X中不支持。誰能告訴我爲什麼getopt
是由BSD實現的,但不是GNU? 我嘗試在GNU C庫中構建getopt
,但是由於我的Linux技能不佳,失敗了。如何使用mac中的「getopt」命令讓bash處理長參數?
有沒有人從事這項工作?
改爲使用getopts
通常是一個更好的主意,並堅持使用較短的選項。你可以在this StackOverflow Q&A中看到getopts的行動。在OSX命令行工具中,短選項更爲標準,一致性是一件好事。
此外,getopts內置於bash中,所以它在OSX以及其他可以運行bash的平臺中都是可用的。
請注意,在OSX中也有一個getopt
。從終端輸入man getopt
以查看其文檔。它不支持長期選項。這是在編寫工具在OSX上運行時不使用長選項的好理由。
如果你想這樣做,你可以從macports安裝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)。
我建議使用自制安裝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
我喜歡人們如何downvote,但提供ZERO評論爲什麼... tsk tsk – sMyles
可能重複shell腳本來獲取長和短命令行選項](http://stackoverflow.com/questions/402377/using-getopts-in-bash-shell-script-to-get-long-and-short-command-line-選項) – ghoti