如何检查命令是否可用或是否存在?

时间:2011-08-28 17:41:30

标签: linux command system

我正在使用C语言在Linux上开发一个控制台应用程序。

现在它的一个可选部分(它不是一个要求)取决于可用的命令/二进制文件。

如果我与system()核对,我将sh: command not found作为不需要的输出,并将其检测为存在。那我该怎么检查命令是否在那里?


由于我正在使用C而不是BASH,所以Check if a program exists from a Bash script不重复。

5 个答案:

答案 0 :(得分:2)

回答有关如何发现代码中是否存在该命令的问题。您可以尝试检查返回值。

int ret = system("ls --version > /dev/null 2>&1"); //The redirect to /dev/null ensures that your program does not produce the output of these commands.
if (ret == 0) {
    //The executable was found.
}

您还可以使用popen来读取输出。将其与其他答案中建议的whereis和type命令相结合 -

char result[255];
FILE* fp = popen("whereis command", "r");
fgets(result, 255, fp);
//parse result to see the path of the bin if it has been found.
pclose(check);

或使用类型:

FILE* fp = popen("type command" , "r"); 

type命令的结果有点难以解析,因为它的输出会根据您要查找的内容而有所不同(二进制,别名,函数,未找到)。

答案 1 :(得分:0)

您可以在Linux(或任何POSIX OS)上使用stat(2)来检查文件是否存在。

答案 2 :(得分:0)

使用which,您可以检查system()返回的值(如果找到则返回0)或命令输出(未找到输出等):

$ which which
/usr/bin/which
$ echo $?
0
$ which does_t_exist
$ echo $?
1

答案 3 :(得分:0)

如果运行shell,“type commandname”的输出将告诉您commandname是否可用,如果可用,它是如何提供的(别名,函数,二进制路径)。您可以在此处阅读type的文档:http://ss64.com/bash/type.html

答案 4 :(得分:0)

我会浏览当前的PATH,看看你是否能在那里找到它。这就是我最近使用安装了agrep的程序的可选部分所做的事情。或者,如果您不信任PATH但要自己检查路径列表,请使用它。

我怀疑你需要检查它是否是内置的。