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