我想让我的bash脚本处理长参数.我找到了getopt
,但它在OS X中不受支持.任何人都可以告诉我为什么getopt
BSD实现了,而不是GNU?我尝试getopt
在GNU C lib中构建,但由于我在Linux上的技能不佳而失败了.
有人做过这项工作吗?
Den*_*aud 22
只要运行brew install gnu-getopt
.
您可以指定它的路径
/usr/local/Cellar/gnu-getopt/1.1.6/bin/getopt
或使用brew link --force gnu-getopt
它将被链接/usr/local/bin/
请注意,强制链接可能会破坏您的系统(因为它取代了gnu系统的getopt).
另见建议定义的其他答案FLAGS_GETOPT_CMD
.
我建议使用Homebrew进行安装gnu-getopt
,然后将其添加$FLAGS_GETOPT_CMD
到~/.bash_profile
文件中以指定getopt的cmd路径,指向homebrew的位置,如下所示:
brew install gnu-getopt
Run Code Online (Sandbox Code Playgroud)
然后按照brew的指示添加到您的本地路径:
sudo echo 'export PATH="/usr/local/opt/gnu-getopt/bin:$PATH"' >> ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
然后,您可以添加FLAGS_GETOPT_CMD
:
sudo echo 'export FLAGS_GETOPT_CMD="$(brew --prefix gnu-getopt)/bin/getopt"' >> ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
打开一个新终端,或. ~/.bash_profile
在现有终端中运行以加载更改
运行echo $FLAGS_GETOPT_CMD
以确认它实际上是在控制台中设置的
一般来说,最好使用getopts
替代方案,并坚持使用简短的选项。您可以在此 StackOverflow 问答中看到 getopts 的实际应用。短选项在整个 OSX 命令行工具中更为标准,并且一致性是一件好事。
此外,getopts 内置于 bash 中,因此它绝对可以在 OSX 以及可以运行 bash 的所有其他平台中使用。
getopt
请注意, OSX 中也提供了此功能。在终端中,键入man getopt
以查看其文档。它不支持长选项。这是在编写在 OSX 上运行的工具时不使用长选项的一个很好的理由。
如果您无论如何都想这样做,可以getopt
从macports安装。或者,如果您想要更好的可移植性,您可以进行自己的长参数处理。
发布一些代码,我们将帮助调试它。