从Bash管道输入到C ++ cin

时间:2013-10-22 17:40:31

标签: c++ bash input pipe cin

我正在尝试编写一个简单的Bash脚本来编译我的C ++代码,在这种情况下,它是一个非常简单的程序,它只是将输入读入一个向量,然后打印该向量的内容。

C ++代码:

    #include <string>
    #include <iostream>
    #include <vector>

    using namespace std;

    int main()
    {
         vector<string> v;
         string s;

        while (cin >> s)
        v.push_back(s);

        for (int i = 0; i != v.size(); ++i)
        cout << v[i] << endl;
    }

Bash脚本run.sh:

    #! /bin/bash

    g++ main.cpp > output.txt

这样编译我的C ++代码并创建a.out和output.txt(由于没有输入,它是空的)。我使用“input.txt&lt;”尝试了一些变体。没有运气。我不知道如何将我的输入文件(只是几个随机单词的简短列表)传递给我的c ++程序。

2 个答案:

答案 0 :(得分:7)

您必须先编译程序才能创建可执行文件。然后,运行可执行文件。与脚本语言的解释器不同,g++不解释源文件,而是编译源以创建二进制图像。

#! /bin/bash
g++ main.cpp
./a.out < "input.txt" > "output.txt"

答案 1 :(得分:4)

g++ main.cpp编译它,然后编译的程序被称为'a.out'(g ++的默认输出名称)。但是为什么要获得编译器的输出? 我想你想要做的是这样的事情:

#! /bin/bash

# Compile to a.out
g++ main.cpp -o a.out

# Then run the program with input.txt redirected
# to stdin and the stdout redirected to output.txt
./a.out < input.txt > output.txt

同样正如Lee Avital建议正确管道文件中的输入:

cat input.txt | ./a.out > output.txt

第一个只是重定向,而不是技术上的管道。您可以在此处阅读David Oneill的说明:https://askubuntu.com/questions/172982/what-is-the-difference-between-redirection-and-pipe