Bash: передать файл через TCP. - PullRequest
0 голосов
/ 21 июня 2020

Мне нужно написать функцию, которая имеет дело с двумя параметрами.

  • путь к файлу, который будет развернут (как $ 1) и
  • номер порта порта на который выводит содержимое этого файла (как $ 2)

Затем функция должна сделать содержимое этого файла доступным для первой программы, которая подключается к нему через TCP. Функция не предназначена для запуска чего-либо важного в фоновом режиме и для прерывания после потоковой передачи содержимого файла. Будьте осторожны, чтобы не запускать в фоновом режиме функцию, которая может заблокировать указанный c порт.

Но я не знаю, как с этим бороться.

Тестовый пример

echo -e "five\nsix\nseven" > $WORK_DIR/testfile.txt
servelines $WORK_DIR/testfile.txt 7777 &
sleep 0.1
RESULT=$(nc -d 127.0.0.1 7777)
[[ "$RESULT" == $(cat $WORK_DIR/testfile.txt) ]] || (echo "received results should be 'five six seven' but are '$RESULT'" && false)

1 Ответ

1 голос
/ 21 июня 2020

Существует команда под названием nc (netcat), которая позволяет вам отправлять данные через TCP-соединение.

Для обслуживания данных вы должны использовать флаг -l, чтобы указать ему действовать как сервер. Он обслуживает данные, отправленные через стандартный ввод.

Ваш сценарий может выглядеть так

#!/bin/bash
nc -l $2 < $1

Возможно, вам потребуется установить nc, поэтому убедитесь, что он у вас есть.

netcat действительно действительно полезен, поэтому вам следует потратить некоторое время, чтобы прочитать страницу руководства (запустите man nc)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...