Wie leitet man eine Cat-Ausgabe an die Standardeingabe weiter?

Wie leitet man eine Cat-Ausgabe an die Standardeingabe weiter?

C++ -------> g++ -------> bash:

#include <cstdlib>

using namespace std;

int main(){

    system("mail -s test_mail [email protected]");
    system("test msg");
    system(".");

    return 0;
 }

Der erste Systembefehl läuft einwandfrei, aber dann ist es so, als würde er Eingaben aus einem anderen Eingabestream (nicht stdin) entgegennehmen. system("test msg") wird nur ausgeführt, nachdem ich mit Strg+C das Mailprogramm verlasse, erst dann versucht Bash, "test msg" zu interpretieren.

Antwort1

system()führt wirklich nur Befehlszeilen aus. Es ist kein Pipe-ähnliches Ding.

Die kleinstmögliche Änderung, damit Ihr Beispielprogramm funktioniert, wäre

int main()
{
    system("echo test msg | mail -s test_mail [email protected]");
    return 0;
}

mailweil Ihre Nachricht dann über eine Pipe in die Standardeingabe des Programms gelangt .

Praktischer wäre es, wenn Sie Ihre Nachricht in eine temporäre Datei schreiben und dann mailstdin von dieser Datei umleiten.

verwandte Informationen