2016-08-06 39 views
0

Ich habe ein einfaches Programm, z. in C++Wie kopiere und führe Befehl in verschiedenen Terminal

#include<iostream> 
using namespace std; 

int main() 
{ 
    int a, b, c; 
    cin >> a >> b; 
    c = a + b; 
    cout << c; 
} 

Hier muß i a und b als Eingänge zu der Zeit der Ausführung geben.

Ich muss ein Skript schreiben, um automatisch den Wert von a (sagen wir 5) und b (sagen wir 7) in das erste Terminal einzugeben.

+0

auf Rohrleitungen lesen, und das 'echo'-Kommando –

+1

Haben Sie darüber nachgedacht, Ihr Skript so zu schreiben, dass * es * das Programm selbst startet und dann direkt mit ihm interagiert, anstatt zu versuchen, mit mehreren Terminals zu arbeiten? – ray

+0

Eine andere einfachere Empfehlung wäre, dass Ihr C++ - Programm Befehlszeilenargumente akzeptiert, damit Ihr Skript es mit beliebigen Eingaben aufrufen kann (z. B. './your-program.out 5 7'). Ihr C++ - Programm müsste nur die eingegebenen Zahlenstrings in tatsächliche Zahlen konvertieren (siehe 'atoi' Funktion) – ray

Antwort

0

Wenn die ausführbare Datei ist a.out dann können Sie

a=5;b=7;echo $a $b | ./a.out

Btw verwenden, in Ihrem Beispiel die Namespace für cout/cin fehlt (für zB hinzufügen using namespace std; nach der # enthalten).

1

Ich denke, Sie müssen etwas ändern, um dies zu tun, wie Sie die Argumente aus dem Skript übergeben möchten. C++ Programm main.cpp:

#include <iostream> 
#include <stdlib.h> 
using namespace std; 
int main(int argc,char *argv[]) 
{ 
    if(argc==1) 
    { 
    exit(1); 
    } 
    int a=atoi(argv[1]); 
    int b=atoi(argv[2]); 
    cout<<a+b<<endl; 
return 0; 
} 

und Shell-Skript wird:

#!/bin/bash 

    g++ temp.cpp -o out 
    a=5 
    b=2 
    ./out "${a}" "${b}" 

Sie here für das Bestehen variables.And this also

+0

Ich denke, ich hätte die Seite aktualisieren sollen ... Ich habe deine Antwort bemerkt, nachdem ich meine gepostet habe, und wir haben am Ende nachgedacht: \ – ray

+0

@ray Ich kann mir nicht vorstellen, wie beide Codes gleich sind. aber wenn Sie die Antwortzeit sehen, löst es sich. –

+0

Nein, wir haben nur ähnliche Lösungen vorgeschlagen. Unser Code ist sicherlich nicht derselbe, und ich hatte Ihren Beitrag nicht vor meinem gesehen.Aber wir haben immer noch ähnliche Lösungen für das gleiche Problem bereitgestellt. Wir sollten uns beide wohl fühlen. – ray

1

Statt mit mehreren versuchen, ein Programm zu schreiben, die in Wechselwirkung sehen sollten Terminals oder arbeitet mit Rohren, die komplizierter sein könnten, würde ich empfehlen, Ihr Programm einfacher zu machen, indem Sie es behandeln Kommandozeilenargumente. Sie können neu schreiben Sie Ihr C++ Programm wie folgt:

#include <iostream> 
#include <cstdlib> // for atoi function 

using namespace std; 

int main(int argc, char* argv[]) // to accept CLI inputs 
{ 
    // argv[0] has path/name to this program 
    // argv[1] has 1st argument, if provided 
    // argv[2] has 2nd argument, if provided 
    // if argc != 3, then we don't have everything we expected, and we bail 
    if(argc != 3) { 
     cerr << "usage: " << argv[0] << " arg1 arg2" << endl; 
     return -1; 
    } 

    // for simplicity, we assume that you won't get letters, only numbers 
    int a = atoi(argv[1]); 
    int b = atoi(argv[2]); 
    cout << (a + b); 

    return 0; 
} 

Sie können dann einen einfachen Shell-Skript schreiben, das Programm zu starten, mit dem, was Argumenten, die Sie wollen. Zum Beispiel, wenn die integrierte Programm test genannt wird (verwenden g++ -o test test.cpp zu bauen), dann können Sie dieses Beispiel launcher.bash Skript verwenden:

#!/bin/bash 

for i in {0..10} 
do 
    ./test $i $i 
    echo 
done 

Das Skript erzeugt die folgende Ausgabe:

/tmp ❯ ./launcher.bash 
0 
2 
4 
6 
8 
10 
12 
14 
16 
18 
20