3

Я пытаюсь придумать однострочник для отправки текста на простой эхо-сервер - но несколько соединений параллельно. Вот что я пытаюсь:

echo -e  A,B,C,D | xargs -d, -i -P 4 echo {} |  nc localhost 7000

Тем не менее, это не совсем работает. Сервер получает четыре соединения, но без данных ("ноль").

Какова правильная команда xargs и netcat здесь?

4 ответа4

1

Ответ заключается в использовании sh -c для запуска xargs:

echo 'A,B,C,D' | xargs -d, -i -P 4 sh -c 'echo "{}" | nc localhost 7000'

См .: https://stackoverflow.com/questions/845863/how-to-use-in-an-xargs-command.

1

Это может быть немного более кратким (и читабельным, я говорю), если вам нравится использовать GNU Parallel:

parallel 'echo {} | nc localhost 7000' ::: A B C D

Или даже:

parallel 'echo {} | nc localhost 7000' ::: {A..D}
0

Используйте echo -n или вы получите 5 соединений вместо четырех, одно из которых без данных. Если на сервере это не проверено, возможно, это вызывает вашу проблему.

echo -n A,B,C,D | xargs -d, -I{} -P 4 -n 1 echo {} | nc localhost 7000

Более того, используя netcat в качестве сервера прослушивания, он работает правильно:

zhen@sydow:~$ nc -l 7000
A
D
B
C

А также, кажется, что параллельно, я вижу неуместное эхо.

0

Вам не нужно повторять эхо, это действие по умолчанию для xargs. Эта однострочная строка служит для быстрого автономного теста, но вы можете удалить тестовый прослушиватель, настроенный до &

nc -l 7001 & echo  A B C D | xargs -P4 -n1 | nc localhost 7001

Результаты:

amit@deimos:~$ nc -l 7001 & echo A B C D | xargs -P4 -n1 | nc localhost 7001
[6] 7115
D
B
C
A
[6]   Done                    nc -l 7001

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .