xplicaciones necesarias para el comportamiento del comando exec integrado de bash de Linux
DesdeBash Manual de referencia Me sale lo siguiente sobreexec
omando @ bash incorporado:
Si se proporciona el comando, reemplaza el shell sin crear un nuevo proceso.
Ahora tengo el siguientebash
script:
#!/bin/bash
exec ls;
echo 123;
exit 0
Esto se ejecutó, obtuve esto:
cleanup.sh ex1.bash file.bash file.bash~ output.log
(files from the current directory)
Ahora, si tengo este script:
#!/bin/bash
exec ls | cat
echo 123
exit 0
Obtengo el siguiente resultado:
cleanup.sh
ex1.bash
file.bash
file.bash~
output.log
123
Mi pregunta es
Si cuandoexec
se invocait reemplaza el shell sin crear un nuevo proceso, ¿por qué cuando pones| cat
, elecho 123
está impreso, pero sin él, no lo está. Por lo tanto, sería feliz si alguien puede explicar cuál es la lógica de este comportamiento.
Gracias
EDIT: después de la respuesta de @torek, obtengo un comportamiento aún más difícil de explicar:
1.exec ls>out
l comando @ crea elout
archivo y poner en él ells
esultado del comando de @;
2.exec ls>out1 ls>out2
crea solo los archivos, pero no incluye ningún resultado. Si el comando funciona como se sugiere, creo que el comando número 2 debería tener el mismo resultado que el comando número 1 (aún más, creo que no debería haber creado elout2
archivo)