将输入值从bash脚本传递到c ++可执行文件

时间:2017-09-08 19:02:04

标签: c++ linux bash

我有一个需要输入值的c ++代码。我想有一个bash脚本来自动运行我的c ++可执行文件。我的bash脚本如下:

#!/bin/bash
g++ freshness.cpp -g -o prob
for((i=0;i<30;i++))
{
    ./prob<$2 ../../data/new_r.txt ../../data/new_p.txt ../../data  /t_$1.txt  >> result.txt
}
./cal result.txt
rm result.txt

我的 main.cpp 如下:

int main(int argc,char*argv[])
{
    map<int, struct Router> nodes;
    cout<<"creating routers..."<<endl;
    Create_router(argv[1],nodes);
    cout<<"creating topology..."<<endl;
    LoadRouting(argv[2],nodes);
    cout<<"simulating..."<<endl;
    Simulate(argv[3],nodes);
    return 0;
}

cin中有Create_router(argv[1],nodes),例如cin>>r_size;

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

./prob < $2

表示将程序输入重定向到名称在$2变量中的文件。

如果$2是实际的输入数据,而不是文件名,那么你应该使用here-string:

./prob <<< "$2" ../../data/new_r.txt ../../data/new_p.txt ../../data  /t_$1.txt  >> result.txt

或here-doc:

./prob <EOF ../../data/new_r.txt ../../data/new_p.txt ../../data  /t_$1.txt  >> result.txt
$2
EOF

或将输入传递给程序:

printf "%s\n" "$2" | ./prob ../../data/new_r.txt ../../data/new_p.txt ../../data  /t_$1.txt  >> result.txt

here-string方法最简单,但它是bash扩展名。其他方法可移植到所有POSIX shell。