Eingabe von Code oder Terminal auf Laufcode oder Terminal umleiten?


3

Derzeit verwende ich ein Software-Skript, das eine kontinuierliche Eingabe über das Terminal erfordert. Das Skript wertet Dateien kontinuierlich aus, indem es es empfängt Pfadeingabe und die Datei im Pfad auswerten.

Das Ziel : Ist es möglich, ein Skript auszuführen, das eine Eingabe durch Übergeben der Eingabe von erfordert ein anderes Terminal oder Skript.

Die Auswertesoftware lädt viele Daten, bevor sie für die Verarbeitung bereit ist. Daher würde ich es vorziehen, die Software am Laufen zu halten und von Zeit zu Zeit Eingaben zu übergeben. Anstatt die Software zu starten und alle erforderlichen Daten zu laden (was Zeit kostet).

Ich kann erwähnen, dass ich es versucht habe tty finden:
$ /dev/pts/19
dann durch anderes Terminal laufen: $ <command> <myinput> > /dev/pts/19
wo der Befehl durch 'echo / print' ersetzt wird
Es wird jedoch nur auf dem anderen Terminal gedruckt, es fungiert jedoch nicht als Eingabe für die Software.

Antworten:


2

Erstellen Sie eine Named Pipe:

mkfifo pipe

Stellen Sie sicher, dass es nicht geschlossen wird (siehe diese Antwort ):

exec 3<>pipe

Füttern Sie Ihr Skript aus der Pipe:

<pipe your_script.sh
# or if you want to see incoming data
<pipe tee >(your_script.sh)

Dann von einem anderen Terminal aus nutzen echo. printf oder Wasauchimmer:

echo "/some/path/or/another/input" > pipe

oder

cat large_input.txt > pipe

oder

script_that_generates_input.sh > pipe

Aber Vorsicht vor Rennen! Beschicken Sie das Rohr nicht gleichzeitig von zwei oder mehr Quellen. Warten Sie immer, bis der aktuelle Zufuhrbefehl beendet ist, bevor Sie den nächsten ausführen. Wenn eine Quelle viele Daten durchläuft, kann dies in der Mitte gehalten werden, bis die empfangende Seite die Daten verarbeitet. Stellen mbuffer (mit Argumenten, die zu Ihrem Anwendungsfall passen) vor your_script.sh Erstellen eines Puffers, in dem mehr eingehende Daten gespeichert werden können, bevor ein Zufuhrbefehl gehalten wird.

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.