我希望找到一种方法将程序1的输出传递给程序2的输入。我创建了两个非常简单的程序来尝试和理解如何做到这一点,但我遇到了问题。
ProgramOne:
#include <iostream>
int main()
{
using namespace std;
std::cout << "Hello World!";
return 0;
}
ProgramTwo(打印所有参数):
#include <iostream>
int main(int argc, char *argv[])
{
using namespace std;
cout << "There are " << argc << " arguments:" << endl;
// Loop through each argument and print its number and value
for (int nArg=0; nArg < argc; nArg++)
cout << nArg << " " << argv[nArg] << endl;
return 0;
}
我尝试使用pipe命令传递输出:
./one | ./two
但我的第二个程序只打印一个参数:
There are 1 arguments:
0 ./two
我也尝试过以下命令:
/one > ./two
但这导致两个程序都没有输出。
我哪里错了?
答案 0 :(得分:4)
将一个程序的输出传递给另一个程序的方法是正确的:
./one | ./two
但是,您似乎不想这样做,并且希望将一个程序的所有输出作为另一个程序的命令行参数传递。
有多种方法可以做到这一点,但其中一种方法是:
./two `./one`
(注意反击!)
如果您想将其作为单个参数传递,请尝试:
./two "`./one`"
答案 1 :(得分:1)
你非常接近。您可以使用xargs工具将标准输出转换为一系列参数,以便调用后续程序。例如,您可以这样做:
./one | xargs ./two
这有望打印出“Hello world”作为程序二的参数。