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

Я пытаюсь сделать сторожевой сценарий удара, который должен проверить, открыт ли порт, на основе статуса выхода, иначе должен запустить демона. Проблема, мне не может удаться избежать сценария, производящего любую информацию путем перенаправления 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, или возможно о синтаксисе удара? Сообщите мне то, что я понимаю превратно.

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

2 ответа

Проблема не имеет никакого отношения nc или netcat или любой их род. Вы выполняете две команды сюда, nc и grep, но только перенаправляете вывод grep. То, что Вы хотите сделать:

nc -zv 1.2.3.4 55  &>/dev/null

, Который, конечно, был бы бессмыслен с тех пор, если нет никакого вывода, Вы не можете grep. Это - то, для какого grep's -q флаг:

   -q, --quiet, --silent
          Quiet;   do   not  write  anything  to  standard  output.   Exit
          immediately with zero status if any match is found, even  if  an
          error was detected.  Also see the -s or --no-messages option.

Так, то, что Вы после, является чем-то вроде этого:

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

Или, если необходимо проанализировать stderr также, это:

nc -zv 1.2.3.4 55  |& grep -q " open " && start_daemon
5
ответ дан 21 June 2016 в 05:11
  • 1
    Это работает отлично, большое спасибо! Я только что запустил с Linux, надейтесь, что я могу помочь кому-то в будущем как Вы, помог мне сегодня. Снова Спасибо! – Bollie 7 November 2017 в 00:44

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

ОБНОВЛЕНИЕ:

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

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

1
ответ дан 21 June 2016 в 05:11
  • 1
    @Bollie, Если этот ответ решил Вашу проблему, занимают одну минуту, и принимают его путем нажатия на галочку налево. Это отметит вопрос, как отвечено и является способом, которым благодарность выражена на сайтах Exchange Стека. – terdon♦ 7 November 2017 в 03:19

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

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