Перенаправление STDOUT и STDERR для nc

Я пытаюсь создать скрипт watchdog bash, который должен проверить, открыт ли порт, на основе статуса выхода, иначе должен запустить демон. Проблема в том, что я не могу избежать того, чтобы скрипт выдавал какую-либо информацию, перенаправляя STDOUT и STDERR.

nc -zv 1.2.3.4 55 | grep " open " >/dev/null 2>&1

или

nc -zv 1.2.3.4 55 | grep " open " 2>&1 >/dev/null

или

nc -zv 1.2.3.4 55 | grep " open " &>/dev/null

все равно

'FQDN_hostname_or_domainname [1.2.3.4] 55 (?) open'

Тем не менее, эта комбо работает с другими командами, такими как netstat. Это что-то о netcat или, может быть, о синтаксисе bash? Пожалуйста, дайте мне знать, что я ошибаюсь.

1
задан 20 June 2016 в 19:11

1 ответ

Удалось запустить скрипт правильно, используя статус выхода netcat nc, при запуске без опции -v. В любом случае, кажется, что вывод netcat netcat не попадает в grep. Я полагаю, что это может быть вызвано каким-то разветвлением.

UPDATE:

Как упоминал Тердон в комментарии к его ответу, часть выхода из nc / netcat напечатан на stderr, часть до толстого. Таким образом, объединение этих двух файлов перед конвейером в grep делает трюк:

netcat -zvw1 1.2.3.4 55 2>&1 | grep "open"

1
ответ дан 23 May 2018 в 09:05

Другие вопросы по тегам:

Похожие вопросы: