Ich versuche, eine dauerhafte Verbindung mit bash zu erstellen. Am Terminal 1, halte ich eine netcat als Server ausgeführt wird:Persistente Verbindung in Bash-Skript
$ nc -vlkp 3000
Listening on [0.0.0.0] (family 0, port 3000)
Am Terminal 2, I eine Fifo und halten eine Katze zu erstellen:
$ mkfifo fifo
$ cat > fifo
auf Terminal 3, ich mache das Fifo als Eingang zu einem Client netcat:
$ cat fifo | nc -v localhost 3000
Connection to localhost 3000 port [tcp/*] succeeded!
Am Terminal 4, sende ich, was ich will:
$ echo command1 > fifo
$ echo command2 > fifo
$ echo command3 > fifo
zurück zum Terminal gehen 1, sehe ich die Befehle empfangen werden:
$ nc -vlkp 3000
Listening on [0.0.0.0] (family 0, port 3000)
Connection from [127.0.0.1] port 3000 [tcp/*] accepted (family 2, sport 41722)
command1
command2
command3
Also, alles funktioniert. Aber wenn ich in einem Skript setzen, dass (I genannt, dass fifo.sh), bash nicht in der Lage ist, in Fifo zu schreiben:
Am Terminal 1, gleichen Zuhören Server:
$ nc -vlkp 3000
Listening on [0.0.0.0] (family 0, port 3000)
Am Terminal 2, I führen Sie das Skript:
#!/bin/bash
rm -f fifo
mkfifo fifo
cat > fifo &
pid1=$!
cat fifo | nc -v localhost 3000 &
pid2=$!
echo sending...
echo comando1 > fifo
echo comando2 > fifo
echo comando3 > fifo
kill -9 $pid1 $pid2
Der Ausgang im Terminal 2:
$ ./fifo.sh
Connection to localhost 3000 port [tcp/*] succeeded!
sending...
Am Terminal 1 ich nur die connec sehen tion. Keine Befehle:
$ nc -vlkp 3000
Listening on [0.0.0.0] (family 0, port 3000)
Connection from [127.0.0.1] port 3000 [tcp/*] accepted (family 2, sport 42191)
Connection closed, listening again.
Jede Idee, warum es nur interaktiv funktioniert? Oder gibt es eine andere Möglichkeit, eine persistente Verbindung nur mit Bash zu erstellen? Ich möchte nicht für Expect gehen, weil ich ein größeres Bash-Skript habe, das nach dem Senden des Befehls1 etwas Arbeit leistet, und command2 hängt vom Befehl1 ab usw.
Vielen Dank!
Hallo und willkommen zu Stack Overflow! Das ist die beste Anfängerfrage, die ich je gesehen habe. – l0b0