Sto provando a creare una connessione persistente usando bash. Il terminal 1, tengo un netcat esecuzione come un server:Connessione persistente nello script Bash
$ nc -vlkp 3000
Listening on [0.0.0.0] (family 0, port 3000)
su Terminal 2, creo una FIFO e mantenere un gatto:
$ mkfifo fifo
$ cat > fifo
su Terminal 3, faccio la FIFO come ingresso a un netcat client:
$ cat fifo | nc -v localhost 3000
Connection to localhost 3000 port [tcp/*] succeeded!
su terminal 4, mando quello che voglio:
$ echo command1 > fifo
$ echo command2 > fifo
$ echo command3 > fifo
Tornando al terminal 1, vedo i comandi ricevuti:
$ 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
Quindi, tutto funziona. Ma quando ho messo che in uno script (ho chiamato che fifo.sh), bash non è in grado di scrivere nella FIFO:
su Terminal 1, stesso server di ascolto:
$ nc -vlkp 3000
Listening on [0.0.0.0] (family 0, port 3000)
su Terminal 2, I eseguire lo script:
#!/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
l'output di terminale 2 è:
$ ./fifo.sh
Connection to localhost 3000 port [tcp/*] succeeded!
sending...
il terminale 1 mi vede solo il connec zione. Nessun comando:
$ 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.
Qualche idea sul motivo per cui funziona solo in modo interattivo? O c'è un altro modo per creare una connessione persistente usando solo Bash? Non voglio andare su Expect perché ho uno script Bash più grande che funziona dopo aver inviato il comando 1, e il comando 2 dipende dall'output di command1, ecc.
Grazie!
Ciao e benvenuto su Stack Overflow! Questa è la migliore domanda per principianti che abbia mai visto. – l0b0