我想让我的 bash 脚本处理长参数。我找到getopt
了,但 OS X 不支持它。谁能告诉我为什么getopt
由 BSD 实现,而不是 GNU?我尝试getopt
在 GNU C lib 中构建,但由于我对 Linux 的技能不佳而失败了。
有人做过这项工作吗?
有一个用于 getopt 的酿造瓶。
跑吧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
然后按照 brew 的说明添加到本地路径:
sudo echo 'export PATH="/usr/local/opt/gnu-getopt/bin:$PATH"' >> ~/.bash_profile
然后你可以添加FLAGS_GETOPT_CMD
:
sudo echo 'export FLAGS_GETOPT_CMD="$(brew --prefix gnu-getopt)/bin/getopt"' >> ~/.bash_profile
打开一个新终端,或. ~/.bash_profile
在现有终端中运行以加载更改
运行echo $FLAGS_GETOPT_CMD
以确认它实际上是在您的控制台中设置的
改用它通常是一个更好的主意getopts
,并坚持使用短选项。你可以在这个 StackOverflow Q&A中看到 getopts 的作用。短选项在整个 OSX 命令行工具中更加标准,并且一致性是一件好事。
此外,getopts 内置在 bash 中,因此它绝对可以在 OSX 以及所有其他可以运行 bash 的平台中使用。
请注意,getopt
在 OSX 中也有一个。在终端中,键入man getopt
以查看其文档。它不支持长选项。这是在编写工具以在 OSX 上运行时不使用长选项的一个很好的理由。
如果你想这样做,你可以getopt
从macports安装。或者,如果您想要更好的可移植性,您可以滚动自己的长参数处理。
发布一些代码,我们将帮助调试它。