exec
é frequentemente usado em scripts de shell que atuam principalmente como wrappers para iniciar outros binários. Por exemplo:
#!/bin/sh
if stuff;
EXTRA_OPTIONS="-x -y -z"
else
EXTRA_OPTIONS="-a foo"
fi
exec /usr/local/bin/the.real.binary $EXTRA_OPTIONS "$@"
para que, após a conclusão da execução do wrapper, o binário "real" assuma o controle e não haja mais nenhum rastreamento do script do wrapper que ocupou temporariamente o mesmo slot na tabela de processos. O binário "real" é um filho direto de tudo o que o lançou, em vez de um neto.
Você também mencionou o redirecionamento de E / S na sua pergunta. Esse é um caso de uso bem diferente exec
e não tem nada a ver com a substituição do shell por outro processo. Quando exec
não tem argumentos, assim:
exec 3>>/tmp/logfile
os redirecionamentos de E / S na linha de comando entram em vigor no processo atual do shell, mas o processo atual do shell continua em execução e passa para o próximo comando no script.