What precisely is going on when one "passes a heredoc as a file"?
Você não é. Aqui os documentos fornecem informações padrão, como um tubo. Seu exemplo
awk '{ ... }' <<EOF
foo bar baz
EOF
é exatamente equivalente a
echo foo bar baz | awk '{ ... }'
awk , cat e ruby são lidos a partir da entrada padrão, caso não recebam um nome de arquivo para ler na linha de comando. Essa é uma escolha de implementação.
Why does the first version with anisble-playbook fail but second version succeed?
ansible-playbook não lê a entrada padrão por padrão, mas requer um caminho de arquivo. Esta é uma escolha de design.
/dev/stdin é muito provável um link simbólico para /dev/fd/0 , que é uma maneira de falar sobre o processo atual descritor de arquivo # 0 (entrada padrão). Isso é algo exposto pelo seu kernel (ou biblioteca do sistema). O comando ansible-playbook abre /dev/stdin como um arquivo normal do sistema de arquivos e acaba lendo sua própria entrada padrão, que de outra forma seria ignorada.
Você provavelmente também tem /dev/stdout e /dev/stderr links para FDs 1 & 2, que você pode usar também se estiver dizendo algo onde colocar sua saída.
What is the significance of passing /dev/stdin before the heredoc?
É um argumento para o comando ansible-playbook .
Why do other utilities like ruby or awk not need the /dev/stdin before the heredoc?
Eles lêem a entrada padrão por padrão como uma opção de design, porque eles são feitos para serem usados em pipelines. Eles escrevem na saída padrão pelo mesmo motivo.