【发布时间】:2011-11-05 13:34:05
【问题描述】:
我正在用 C 语言在 linux 上开发一个控制台应用程序。
现在它的一个可选部分(它不是必需的)取决于可用的命令/二进制文件。
如果我检查system(),我会得到sh: command not found 作为不需要的输出,它会检测到它存在。那么如何检查命令是否存在呢?
不是 Check if a program exists from a Bash script 的副本,因为我使用的是 C,而不是 BASH。
【问题讨论】:
-
你要传递什么给
system()? -
我通过版本选项传递程序名称,例如
system("ls --version")。好吧,至少这是我的想法。 -
在安装时检查所有依赖的命令/包版本不是更有意义吗?如果在编译/安装应用程序时它们就在那里,您可能可以合理地假设它们在运行时就在那里。如果您计划分发它,那么在发行说明/手册页中列出您的所有假设可能是一个好主意。如果你这样做了,你可以只关心在发行版特定的安装脚本中搜索这些东西。
-
正如我在问题中所说,我将该功能用于我项目的一个完全可选的部分。我不希望人们仅仅因为安装了这个“依赖”就需要重新编译我的项目。
-
好吧,他们不需要编译(除非他们愿意)。您仍然可以分发预编译的二进制文件。我只是说大多数应用程序通过在安装时检查每个发行版的依赖关系来处理这个问题。这样,您可以使用受支持的发行版上可用的任何工具来检查依赖关系。如果您项目的这一部分是可选的并且单独安装,那么您将在安装它时运行相应的检查。