передача вывода команды netcat в переменную или передача через утилиту чтения - PullRequest
1 голос
/ 28 апреля 2019

Вывод команды netcat nc - dvzw1 8.8.8.8 443, по-видимому, ведет себя не так, как выходные данные других команд, как и ожидалось, сработало, когда они сохраняются в переменной или передаются через утилиту чтения.

  1. Сохранение вывода nc cmd в переменную cmd_output=$(nc -dvzw1 8.8.8.8 443) создает пустую переменную. Тот же результат без переключателя v. Другие cmds могут быть сохранены в переменную (ls -a, pwd, date).

  2. Передача вывода nc в утилиту чтения, как показано ниже, ничего не записывает в файл. Тот же результат без переключателя v.

nc -dvzw1 8.8.8.8 443 | while read line ; do echo -e "$now $line" ; done >> ~/vpn.log

Канал 'while Read Echo' работал с другой командой. Я также могу перенаправить вывод команды nc непосредственно в файл (т. Е. Без отправки сообщения 'пока читается эхо').

1 Ответ

2 голосов
/ 28 апреля 2019
> nc -dvzw1 8.8.8.8 443
Connection to 8.8.8.8 443 port [tcp/https] succeeded!

Connection to 8.8.8.8 443 port [tcp/https] succeeded! записывается в стандартную ошибку stderr. Подстановка команды $( ... ) фиксирует стандартный вывод команды.

Вы можете отл. перенаправить стандартную ошибку на стандартный вывод: nc -dvzw1 8.8.8.8 443 2>&1.

Если вы просто хотите проверить, успешно ли выполнена команда nc, просто проверьте ее состояние выхода, напр. используя if if nc -dvzw1 8.8.8.8 443 2>/dev/null; then echo "Succeeded"; else echo "failed"; fi или проверяя $?.

...