Я пытаюсь создать скрипт 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? Пожалуйста, дайте мне знать, что я ошибаюсь.
Удалось запустить скрипт правильно, используя статус выхода netcat nc, при запуске без опции -v. В любом случае, кажется, что вывод netcat netcat не попадает в grep. Я полагаю, что это может быть вызвано каким-то разветвлением.
UPDATE:
Как упоминал Тердон в комментарии к его ответу, часть выхода из nc / netcat напечатан на stderr, часть до толстого. Таким образом, объединение этих двух файлов перед конвейером в grep делает трюк:
netcat -zvw1 1.2.3.4 55 2>&1 | grep "open"