Sem tentar descobrir mais sobre os aspectos internos do curl, sugiro que você apenas insira:
printf @hello | curl http://localhost/ --data @-
Como @ ulrich-schwarz sugeriu em um comentário, você também pode usar
--data @<(echo @hello)
se for mais conveniente (nem todas as conchas
suporte esta sintaxe).
Olhando o código-fonte para o curl-7.41.0, não vejo como escapar de um sinal @
para impedir a interpretação como um nome de arquivo:
if('@' == is_file) {
/* a '@' letter, it means that a file name or - (stdin) follows */
if(curlx_strequal("-", p)) {
file = stdin;
set_binmode(stdin);
}
else {
file = fopen(p, "rb");
if(!file)
warnf(config,
"Couldn't read data from file \"%s\", this makes "
"an empty POST.\n", nextarg);
}
/* ... */
}
Então, infelizmente, parece que estamos presos à solução de tubulação acima.