A sintaxe <<word
("Here documents") redireciona a entrada padrão. Então, o que você fez é iniciar um bash cuja entrada padrão é redirecionada para o "documento aqui". Quando o bash inicializa os filhos (ou executa comandos embutidos), eles herdam a entrada padrão do bash, então eles também estão lendo o documento aqui. (Não há nada particularmente misterioso sobre os documentos aqui. Uma possibilidade de implementação é copiar o documento aqui para um arquivo temporário e, em seguida, redirecionar a entrada padrão para esse arquivo. O Bash pode fazer isso sob certas circunstâncias.)
Redirecionar a entrada padrão não é a única maneira de obter o bash para executar um arquivo. Você pode apenas dar bash o nome do arquivo na linha de comando. Novamente, você não precisa de um arquivo real para que isso funcione; você pode usar a substituição do processo, assim:
bash <(echo '
read -p "Say it: " A
echo You said $A
')
Como isso não redireciona a entrada padrão, o read
lerá da entrada padrão, não dos comandos alimentados no bash.
Cuidado com os problemas de cotação: eles me morderam duas vezes digitando esse exemplo simples.