我正在开发一个脚本来检查某些已安装的C程序的版本。使用--version选项执行版本检查。但是,此选项可能未在所有已检查的程序中实现。当实现该选项时,我使用:
version=$(./$program_name --version)
但是当它不是时,程序就开始执行了。 如果我只是在后台执行程序并停止运行,如果继续运行,我永远无法获得版本号。有没有办法在不让程序运行的情况下检查选项是否已实现?
答案 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)
在使用yum
和rpm
的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。