Прошлой ночью я обнаружил, что netcat ведет себя ... ну, как ни странно, если не сказать больше. При вызове (я не использовал флаги, только базовый "netcat [hostname] [номер порта]), он будет делать одну из двух вещей в зависимости от того, что его использует. То есть он будет вести себя немного по-другому, если я запускаю bash Сценарий, использующий netcat, в отличие от использования его в командной строке. Сценарий, который также использует echo для подачи запроса HEAD на порт 80, будет запрашивать ввод данных пользователем в обычном режиме. Однако сразу после нажатия клавиши enter скрипт будет немедленно завершите и верните меня в командную строку. Однако в командной строке вызов netcat с именем хоста и номером порта начнет новую строку без командной строки. Через несколько секунд он перейдет к следующей строке, и я вернуть командную строку. Короче говоря, я попытался исправить это с помощью sudo, чтобы удалить файлы netcat из / bin / (задним числом, я не уверен, почему я думал, что это поможет), прежде чем сразу же понять, что у меня есть облажался и ни разу не зарезервировал, поэтому я переустановил ВМ, которая вернула netcat в рабочее состояние. По крайней мере, до jus т, потому что он снова делает то же самое. Есть ли что-то, что я могу сделать, чтобы устранить эту проблему?
РЕДАКТИРОВАТЬ: Я не понимал, что я все еще работаю 13.04, который может (я надеюсь) иметь какое-то отношение к неработающему netcat. Как только у меня будет запущена версия 14.04, я посмотрю, работает ли netcat снова, а затем снова отредактирую вопрос, чтобы поделиться результатами. Если это сработает, я также подожду один или два дня, чтобы увидеть, появится ли проблема снова. Если этого не произойдет, я добавлю ответ.
РЕДАКТИРОВАТЬ: Теперь я очень смущен. Netcat продолжал вести себя так же после того, как я обновился до 14.04. Хуже того, проблема не была устранена, даже временно, путем переустановки 14.04 через .iso. Если кто-нибудь может помочь мне исправить это, я был бы чрезвычайно благодарен.
Ваш пример, INPUT=hostname; echo -e "HEAD / HTTP/1.1\nhost: $INPUT\n\n" | nc $INPUT 80
, работы в командной строке (шоу хорошо следуют из сервера), но не, когда они вставляются в сценарий, содержа просто строку (показывает плохую ошибку запроса с сервера).
Это вызывается хитрым несовместимость оболочки связанный с dash
:
Вы выполняете сценарий оболочки с минималистической оболочкой /bin/dash
- который также связан как /bin/sh
, оболочка по умолчанию. Это используется, когда нет никакой строки "хижины", или #!/bin/sh
.
проблема вызывается bu echo
встроенная команда тире, который не поддерживает -e
опция. Эти -e
буквально передается как часть Запроса HTTP - который заставляет сервер возвращать ошибку "400 Плохих Запросов".
Для фиксации используйте bash
вместо dash
, например, при помощи первой строки сценария #!/bin/bash