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?
shell-script
pipe
stdin
Jason R
quelle
quelle
./shell_executable
, am Ende der Befehlsliste etwas hinzuzufügen ? Das könnte es am Laufen halten, obwohl Sie zwei laufende Instanzen haben (Eltern & Kind).Antworten:
Fand diese clevere Antwort in einer ähnlichen Frage bei stackoverflow
(echo -e "cmd 1\ncmd 2" && cat) | ./shell_executable
Das macht den Trick. pumpt
cat
die Ausgabe vonecho
in den Eingabestrom von shell_executable und wartet auf weitere Eingaben bis EOF.quelle
cmd 1
zurückgeschrieben wurde, merkte aber nicht, dass es dascmd 1
Der sauberste Weg, dies zu tun, ist wahrscheinlich, nach so etwas wie
bash
der--rcfile
Option 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
wird-
als stdin interpretieren .quelle