我在linux上开发一个控制台应用程序。
现在它的一个可选部分(它不是必需的)依赖于可用的命令/二进制文件。
如果我检查system()
我得到sh: command not found
不需要的输出,它检测到它存在。 那么如何检查命令是否在那里?
不是重复检查一个程序是否存在于Bash脚本中,因为我正在使用C而不是BASH。
回答关于如何发现命令是否存在于您的代码中的问题。 您可以尝试检查返回值。
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
命令的结果有点难以解析,因为它的输出取决于你在找什么(二进制,别名,函数,找不到)。
您可以在Linux(或任何POSIX操作系统)上使用stat(2)来检查文件是否存在。
使用which
,你可以检查system()
返回的值(如果找到0)或者命令的输出(没有输出等于not found):
$ which which /usr/bin/which $ echo $? 0 $ which does_t_exist $ echo $? 1
如果你运行一个shell,“type commandname”的输出将告诉你命令名是否可用,如果是的话,它是如何提供的(别名,函数,二进制路径)。 您可以阅读这里的文档type
: http : //ss64.com/bash/type.html
我只想通过当前的路径,看看你是否能在那里找到它。 这就是我最近用一个需要安装agrep
的程序的可选部分agrep
。 或者,如果您不信任PATH,但是有自己的路径列表来检查,请使用该路径。
我怀疑这是你需要检查壳是否是内置的东西。