Я хочу протестировать подключение к произвольному хосту с помощью 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 $?