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 ols
esultado 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)