Jayson Zhang
Jayson Zhang

Reputation: 11

passing input value from bash script to a c++ executable

I have a c++ code which requires an input value. I would like to have a bash script to run my c++ executable file automatically. My bash script is below:

#!/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

My main.cpp is below:

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;
}

There is a cin in Create_router(argv[1],nodes), like cin>>r_size;

Many thanks in advance.

Upvotes: 1

Views: 2036

Answers (1)

Barmar
Barmar

Reputation: 781300

./prob < $2

means to redirect the input of the program to a file whose name is in the $2 variable.

If $2 is the actual input data, not a filename, then you should use a here-string:

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

or a here-doc:

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

or pipe the input to the program:

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

The here-string method is the simplest, but it's a bash extension. The other methods are portable to all POSIX shells.

Upvotes: 2

Related Questions