LINUX.ORG.RU

NetCat не хочет работать из скрипта bash

 , ,


0

2

Всем привет!

Пробую написать простой скрипт на bash для отправки POST запроса. Ручками из консоли всё работает, стоит то же самое сделать из bash скрипта, то nc тупо возвращает НИЧЕГО и всё, не отправляя при этом данные из stdin. Что я делаю не так?

 
#!/bin/bash
#
message="Test Message 123"
length=$((${#message} + 8))
head="POST /bot_api.php HTTP/1.0\r\nHost: myhost.local\r\nContent-type: application/x-www-form-urlencoded\r\nContent-length: $length\r\nContent-type: application/x-www-form-urlencoded\r\n\r\nmessage=$message\r\n";
echo -en $head | nc -4 -v myhost.local 80

если всё то же самое делать руками из консоли, то всё работает. а если запустить это скрипт, то получаю в ответ только:
Connection to myhost.local 80 port [tcp/http] succeeded!

Ну и возврат управления.

Как так то?

У вас в конце строки точка с запятой. Для bash это альтернатива новой строки, а не конец старой. Там, где head=.

P.S. $head стоит запихнуть в двойные кавычки ("$head").

lexazloy
()
Ответ на: комментарий от lexazloy

В JS тоже, но никто не мешает юзать оба сразу. Даже рекомендуется, для наглядности кода бывшим сишникам и жабистам и для избежания нескольких сайд-эффектов от переноса строки посреди выражения.

anonymous
()

Как так то?

видимо по разному ожидает в завимости о терминал-ли, можно "-w" / { echo ..; sleep; } / { echo ..; cat; } - по идее тоже должно, если запуск скрипта из терминала / socat

anonymous
()
Ответ на: комментарий от anonymous

Не могу утверждать про шелл. Может быть вы правы.

Но в JS точка с запятой обязательна. Окончание можно опускать ровно потому же почему много кривых вещей прощается в html - наследство дней минувших. Браузеры учитывают множество ошибок и дают много послаблений. Иначе бы интернет сломался.

lexazloy
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.