如何知道C程序是否支持选项

时间:2014-03-26 11:00:29

标签: c bash getopt

我正在开发一个脚本来检查某些已安装的C程序的版本。使用--version选项执行版本检查。但是,此选项可能未在所有已检查的程序中实现。当实现该选项时,我使用:

version=$(./$program_name --version)

但是当它不是时,程序就开始执行了。 如果我只是在后台执行程序并停止运行,如果继续运行,我永远无法获得版本号。有没有办法在不让程序运行的情况下检查选项是否已实现?

4 个答案:

答案 0 :(得分:3)

不完全防水,但我开始使用琴弦:

 strings /usr/bin/git | grep -- --version

答案 1 :(得分:1)

如果您指的是任意C程序,则目前无法可靠地检查程序是否支持选项。您可以尝试混合使用./program --help./program --usage./program -h./program --this-option-is-a-lie-or-some-other-bogus-option-to-give-usage-information进行猜测。然而,这最终归结为猜测。

答案 2 :(得分:0)

在使用yumrpm的RedHat和衍生品上,您可以询问rpm包管理器:

$ rpm -q --whatprovides /bin/cat
coreutils-8.4-31.el6_5.1.i686

在Debian上并使用apt-get派生,您可以询问APT包经理:

$ dpkg-query -S /bin/bash 
bash: /bin/bash

答案 3 :(得分:0)

当天我们总是包含一个带有版本信息的what字符串。实际上是SCCS的一部分,如果程序包含以" @(#)"开头的字符串,则它由what命令显示。 C代码就像这样:

static char prog_id[] = "@(#) my_program  version 1.0 - 3/26/2014";

无论如何,尝试在程序上执行what并查看what。 HEH。