C++ 确定命令行程序是否安装在C++;

C++ 确定命令行程序是否安装在C++;,c++,command-line,system,C++,Command Line,System,我试图找出是否安装了命令行程序,以便以后可以使用 到目前为止,我尝试的是: int whichReturn = system("command -v THE_CL_PROGRAM >/dev/null && { exit 50; }|| { exit 60; }"); if (whichReturn == 12800) { //system 'apparently' returns the return value *256 (50*256 = 12800) //

我试图找出是否安装了命令行程序,以便以后可以使用

到目前为止,我尝试的是:

int whichReturn = system("command -v THE_CL_PROGRAM >/dev/null && { exit 50; }|| { exit 60; }");
if (whichReturn == 12800) { //system 'apparently' returns the return value *256 (50*256 = 12800)

    //...

}
然而,它似乎总是返回60,因此失败

有没有更简单的方法?或者有人能指出我的错误在哪里吗


感谢一个使用
的完整程序,其中

isthere.cpp:

#include <iostream>
#include <cstdlib>
#include <sstream>

int main(int argc, char* argv[])
{
        std::ostringstream cmd;
        cmd << "which " << argv[1] << " >/dev/null 2>&1";
        bool isInstalled = (system(cmd.str().c_str()) == 0);
        std::cout << argv[1] << " is "<< ((isInstalled)?"":"NOT ") << "installed! << std::endl;
}

分析来自
的输出,哪个
?您甚至可以只使用返回代码-0表示找到,1表示未找到(路径中的某个位置-如果它不在路径中,那么您使用这些简单的命令运气不佳,您必须手动查找命令…@nyarlathotep我也尝试过,使用了
-s
参数,但这也不起作用。。它返回“256”作为命令,当在终端中输入
时,程序返回路径,因此当您可能在不同的用户下或在与终端不同的环境下运行程序时,它会找到它。对我来说,从C++运行的命令返回256,对于命令没有找到0,对于路径的程序返回了什么?顺便问一下,什么是<代码> -S >代码>参数?我的版本(Ubuntu13.10)没有,你在哪个操作系统上?
这里是foo哪个:没有foo in(/usr/local/bin:/usr/bin:/opt/bin:/usr/i686 pc linux gnu/gcc bin/4.6.3:/usr/games/bin:/home/nm/bin)1
你使用哪个linux版本?在Ubuntu13.10中,没有您所说的输出。您的
版本可能正在打印到
stderr
?或者你正在运行的命令是什么<代码>这里是哪个
?Gentoo。这个解决方案的可移植性到此为止。在最后附加
2>&1
怎么样?i、 e.在
>/dev/null
之后,应抑制所有输出。编辑我的答案可能对csh用户和朋友不起作用(好吧,如果你问我的话,他们确实应该被打一顿)。
$ ./isthere ls
ls is installed!
$ ./isthere grep
grep is installed!
$ ./isthere foo
foo is NOT installed!