Übertragen von Daten zum Standardeintrag eines Prozesses, ohne dass anschließend ein EOF verursacht wird


33

Ich habe eine ausführbare Datei, die eine benutzerinteraktive Shell startet. Ich möchte nach dem Start der Shell zuerst ein paar Befehle einfügen und dann dem Benutzer erlauben, ihre interaktive Sitzung zu haben. Ich kann das leicht machen mit echo:

echo "command 1\ncommand 2\ncommand3" | ./shell_executable

Das funktioniert fast . Das Problem ist, dass der Echo-Befehl, der das STDIN des Prozesses einspeist, EOF trifft, sobald er meine Befehle wiedergibt. Diese EOF bewirkt, dass die Shell sofort beendet wird (als ob Sie Strg + D in der Shell gedrückt hätten).

Gibt es eine Möglichkeit, diese Befehle in stdin einzufügen, ohne anschließend ein EOF zu verursachen?


Haben Sie versucht ./shell_executable, am Ende der Befehlsliste etwas hinzuzufügen ? Das könnte es am Laufen halten, obwohl Sie zwei laufende Instanzen haben (Eltern & Kind).
Goldlöckchen

Antworten:


40

Fand diese clevere Antwort in einer ähnlichen Frage bei stackoverflow

(echo -e "cmd 1\ncmd 2" && cat) | ./shell_executable

Das macht den Trick. pumpt catdie Ausgabe von echoin den Eingabestrom von shell_executable und wartet auf weitere Eingaben bis EOF.


@ jw013 Du hast recht. Ich habe den Beitrag bearbeitet. Vielen Dank. Als ich ohne die Klammern experimentierte, sah ich, dass etwas cmd 1zurückgeschrieben wurde, merkte aber nicht, dass es das cmd 1
Ergebnis sein

DAS FUNKTIONIERT FANTASTISCH! Du hast mir gerade eine Menge Zeit gespart. Vielen Dank!!
Jaggedsoft

22

Der sauberste Weg, dies zu tun, ist wahrscheinlich, nach so etwas wie bashder --rcfileOption zu suchen . Fügen Sie Ihre benutzerdefinierten Befehle in Ihre benutzerdefinierte Datei ein und übergeben Sie sie an die interaktive Shell, um sie beim Start auszuführen.

Wenn keine solche Option vorhanden ist, können Sie auch Folgendes versuchen:

cat custom_commands_file - | ./shell_executable

catwird -als stdin interpretieren .


sehr gute lösung 💪😠
dctremblay
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.