Ich schreibe ein Bash-Skript, das ständig einen Ordner in einer Schleife liest, um Daten in einem definierten Zeitintervall an einen Server zu senden. Ich verwende Netcat als Tool, um eine Verbindung zum Server herzustellen und die Daten zu senden. Mein Pseudocode würde folgendermaßen aussehen:
while true
do
read_folder()
process_data() > result.txt
cat result.txt > netcat ip port
wait 10 sec
done
Mein einziges Problem ist, dass der Client in diesem Szenario jedes Mal die TCP / IP-Verbindung zum Server verbindet und trennt. Ich würde es vorziehen, die Verbindung am Anfang des Skripts herzustellen und am Ende zu schließen.
Gibt es eine Möglichkeit, dies mit Befehlszeilentools in einem Bash-Skript zu tun?
shell
io-redirection
netcat
jmbouffard
quelle
quelle
socat
, es handelt sich um einen Netcat-Ersatz, der über eine integrierte Funktionalität verfügt, um Pipes nach Abschluss erneut zu spawnen.Antworten:
Zwei separate Prozesse: Einer, der result.txt nach netcat kopiert. Result.txt wird über einen anderen Prozess gespeist.
quelle
tail -f
liest die Datei auch nach Erreichen von EOF weiter.: >result.txt
war in Ordnung, es bleibt kein Zeilenumbruch in der Datei. Testen Sie es selbst.echo -n
ist auch in Ordnung, solange Ihre Shell es unterstützt (einige Shells drucken-n
) -:
ist also vorzuziehen (es funktioniert überall). Und du brauchsttail -c +1
; Ohne diese Option werden, wenntail
der Start langsam ist, alle bis auf 10 Zeilen der bereits in der Datei enthaltenen Elemente weggelassen.Platzieren Sie die Umleitung einfach außerhalb der Schleife.
Wenn Sie aus der Schleife heraus in die Standardausgabe der Schleife ausgeben müssen, leiten Sie sie durch einen anderen Dateideskriptor um.
quelle