Назад | Перейти на главную страницу

Как я могу зафиксировать статус выхода `nc` при запуске из` timeout`?

Я хочу протестировать подключение к произвольному хосту с помощью netcat. Кажется -w Аргумент фактически не закрывает соединение через 5 секунд. (Это в Ubuntu 14.04 и netcat-traditional 1.10-40). Он будет продолжать попытки подключения только в течение 5 секунд. Я действительно хочу знать, nc смог успешно подключиться к хосту (статус выхода 0).

Чтобы обойти nc проблема, я бегал nc через timeout команда. Это обеспечивает желаемую функциональность, однако тайм-аут всегда завершается с кодом состояния 124.

Что мне действительно нужно, так это статус выхода nc. Как я могу получить это во время бега timeout 5 nc -w 5 bach; echo $?

Из timeout справочная страница (GNU coreutils 8.22) ...

--preserve-status
выйти с тем же статусом, что и КОМАНДА, даже если время ожидания команды истекло

Итак, ваша команда станет

timeout --preserve-status 5 nc -w 5 bach; echo $?

Однако я только что заметил, что оригинал nc команда использует -w вариант, который нам здесь не нужен. Это говорит nc закрыть соединение, если оно простаивает не отказаться, если соединение занимает слишком много времени.

Вариант, который нам действительно нужен, это -G который устанавливает тайм-аут TCP-соединения. Мы хотим -w также, чтобы соединение было закрыто (потому что мы ничего не отправляем).

Это дает простой nc команда

nc -G 5 -w 5 bach; echo $?

Альтернативный подход - просто отобразить пустую строку в nc отправить на сервер

echo | nc -G 5 bach; echo $?