exec
a menudo se usa en scripts de shell que actúan principalmente como envoltorios para iniciar otros binarios. Por ejemplo:
#!/bin/sh
if stuff;
EXTRA_OPTIONS="-x -y -z"
else
EXTRA_OPTIONS="-a foo"
fi
exec /usr/local/bin/the.real.binary $EXTRA_OPTIONS "$@"
de modo que una vez que el reiniciador termina de ejecutarse, el binario "real" se hace cargo y ya no queda ningún rastro del script del reiniciador que ocupó temporalmente el mismo espacio en la tabla de proceso. El binario "real" es un hijo directo de lo que sea que lo lanzó en lugar de un nieto.
También menciona la redirección de E / S en su pregunta. Ese es un caso de uso bastante diferente exec
y no tiene nada que ver con reemplazar el shell con otro proceso. Cuando exec
no tiene argumentos, así:
exec 3>>/tmp/logfile
luego, las redirecciones de E / S en la línea de comando surten efecto en el proceso actual del shell, pero el proceso actual del shell continúa ejecutándose y pasa al siguiente comando en el script.