我正在使用C语言在Linux上开发一个控制台应用程序。
现在它的一个可选部分(它不是一个要求)取决于可用的命令/二进制文件。
如果我与system()
核对,我将sh: command not found
作为不需要的输出,并将其检测为存在。那我该怎么检查命令是否在那里?
由于我正在使用C而不是BASH,所以Check if a program exists from a Bash script不重复。
答案 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但要自己检查路径列表,请使用它。
我怀疑你需要检查它是否是内置的。