Я пытаюсь создать постоянное соединение с помощью bash. На терминале 1, я держу Netcat работает в качестве сервера:Постоянное соединение в скрипте Bash
$ nc -vlkp 3000
Listening on [0.0.0.0] (family 0, port 3000)
На терминал 2, я создаю ФИФО и держать кошку:
$ mkfifo fifo
$ cat > fifo
На терминале 3, я делаю ФИФО как вход для клиента Netcat:
$ cat fifo | nc -v localhost 3000
Connection to localhost 3000 port [tcp/*] succeeded!
на терминал 4, я отправляю все, что я хочу:
$ echo command1 > fifo
$ echo command2 > fifo
$ echo command3 > fifo
Возвращаясь к терминалу 1, я вижу команды принимается:
$ 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
Итак, все работает. Но когда я положил, что в сценарий (я назвал это fifo.sh), баш не может писать в ФИФО:
На терминале 1, то же прослушивания сервера:
$ nc -vlkp 3000
Listening on [0.0.0.0] (family 0, port 3000)
На терминале 2 я запустить скрипт:
#!/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
выход в терминале 2:
$ ./fifo.sh
Connection to localhost 3000 port [tcp/*] succeeded!
sending...
на терминале 1 я вижу только Конек Тион. Нет команд:
$ 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.
Любая идея о том, почему она работает только в интерактивном режиме? Или есть ли другой способ создать постоянное соединение, используя только Bash? Я не хочу искать Expect, потому что у меня есть более большой скрипт Bash, который выполняет некоторую работу после отправки команды1, а command2 зависит от выхода команды 1 и т. Д.
Спасибо!
Привет и добро пожаловать в переполнение стека! Это лучший начинающий вопрос, который я когда-либо видел. – l0b0