Ваш shebang - это не shebang. Это просто she, без bang:
#!/bin/bash
Исправленный пример:
$ ./test.sh
BASH is: /bin/bash
actual shell is: /bin/bash
$ sudo ./test.sh
BASH is: /bin/bash
actual shell is: /bin/bash
$ cat ./test.sh
#!/bin/bash
echo "BASH is: $BASH"
echo "actual shell is: `readlink /proc/$$/exe`"
В то время как TCP имеет концепцию соединений, у которых есть начало и конец, UDP не имеет этого. UDP — это протокол без установления соединения :, получатель UDP просто ожидает входящие пакеты в указанном порту UDP и выводит содержимое любых прибывающих пакетов UDP.
Получатель nc
понятия не имеет, сколько пакетов может поступать, а также должны ли все эти пакеты поступать с одного и того же хоста,или от нескольких хостов :он просто принимает все, что приходит на указанный порт UDP, и выводит содержимое пакетов UDP на стандартный вывод, никак не анализируя его, пока процесс nc
не будет прерван.
Нет даже встроенной -гарантии того, что любые пакеты, отправленные клиентом/отправителем, будут получены в том же порядке на стороне получателя. :Пакеты могут быть потеряны или переупорядочены в пути. UDP не пытается исправить это :, это работа того, кто использует UDP для решения всех этих проблем (или игнорирует их )в зависимости от своих целей.
Вы можете выбрать конкретную строку, сделать ее означающей «конец данных» и настроить другой сценарий на стороне прослушивания для разбора входящих данных и прекращения процесса прослушивания nc
при получении этой строки. Таким образом, вы начнете создавать свой собственный (, возможно, очень простой )протокол поверх UDP. Именно для этого и был разработан протокол UDP.
В двух словах, ответ на вопрос «Возможно ли nc -ul
завершить работу автоматически?» это «Нет, если вы не сделаете что-то, что делает это».
netcat
имеет опцию-W
:
-W recvlimit Terminate after receiving a number of packets
Так:
nc -ulW 1 192.168.0.2 54
Но вы используете ncat
. Вы можете использовать этот обходной путь:
nc -ul 192.168.0.2 54 -c 'dd count=1 bs=100000 >&3' 3>&1