传递程序1的输出作为程序2的输入

Passing program one output as input for program two

本文关键字:程序 输入 输出      更新时间:2023-10-16

我正在寻找一种方法将程序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

但是这导致两个程序都没有输出。

我哪里错了?

你将一个程序的输出传递给另一个程序的方式是正确的:

./one | ./two

然而,你似乎不想这样做,你想传递一个程序的所有输出作为另一个程序的命令行参数。

有多种方法可以做到这一点,但其中之一是:
./two `./one`

(注意引号)

如果您想将其作为单个参数传递,则尝试:

./two "`./one`"

你很接近了。可以使用xargs工具将标准输出转换为参数序列,以便调用后续程序。例如,你可以这样做:

 ./one | xargs ./two

这将有望输出"Hello world"作为程序二的参数