Seu exemplo, INPUT=hostname; echo -e "HEAD / HTTP/1.1\nhost: $INPUT\n\n" | nc $INPUT 80
, funciona na linha de comando (mostra o resultado ok do servidor), mas não quando colocado em um script, contendo apenas a linha (mostra erro de solicitação incorreto do servidor).
É causada por uma complicada incompatibilidade de shell relacionada a dash
:
Você executa o shell script com o shell minimalista /bin/dash
- que também está vinculado como /bin/sh
, o shell padrão. É usado quando não há linha "shebang" ou #!/bin/sh
.
O problema é causado pelo comando echo
builtin do dash, que não suporta a opção -e
. O -e
é literalmente passado como parte da solicitação HTTP - o que faz com que o servidor retorne um erro "400 Bad Request".
Para corrigir, use bash
em vez de dash
, por exemplo, usando a primeira linha de script #!/bin/bash