xplicações sobre o comportamento do comando exec incorporado no bash do Lin

A partir deBash Manual de Referência Recebo o seguinte sobreexec comando bash builtin:

Se o comando for fornecido, ele substitui o shell sem criar um novo process

Agora eu tenho o seguintebash roteiro

#!/bin/bash
exec ls;
echo 123;
exit 0

Este executado, recebi o seguinte:

cleanup.sh  ex1.bash  file.bash  file.bash~  output.log
(files from the current directory)

Agora, se eu tiver esse script:

#!/bin/bash
exec ls | cat
echo 123
exit 0

Recebo a seguinte saída:

cleanup.sh
ex1.bash
file.bash
file.bash~
output.log
123

Minha pergunta é

Se quandoexec é invocadoit substitui o shell sem criar um novo processo, por que quando colocado| cat, aecho 123 é impresso, mas sem ele, não é. Então, eu ficaria feliz se alguém pudesse explicar qual é a lógica desse comportament

Obrigado

EDIT: Após a resposta @torek, fico ainda mais difícil de explicar o comportamento:

1.exec ls>out comando @ cria oout e coloque nele olsesultado do comando

2.exec ls>out1 ls>out2 cria apenas os arquivos, mas não coloca nenhum resultado. Se o comando funcionar como sugerido, acho que o número 2 do comando deve ter o mesmo resultado que o número 1 (ainda mais, acho que não deveria ter criado oout2 Arquivo)