O ponto crucial não é o redirecionamento, mas o conteúdo do seu arquivo. exec
executa seu arquivo. Isso significa que ele analisa o conteúdo do seu arquivo e tenta executar os comandos escritos nele. Mas o seu arquivo não contém nenhum comando que o shell conheça.
Ele aparece em hi
, mas não existe tal comando. Então, isso diz a você:
sh: hi: command not found
Então, tenta a próxima linha. Ele lê 'so', mas não existe tal comando. Então, isso diz a você:
sh: so: command not found
Se você quiser entregar seu arquivo como entrada para um programa, você precisa colocar o programa em ação de alguma forma. Não jogue apenas os dados no shell e espere que ele descubra por si próprio o que fazer com ele;)