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 o término da execução do wrapper, o binário "real" assuma o controle e não haja mais nenhum rastreio do script de wrapper que ocupou temporariamente o mesmo slot na tabela de processos. O binário "real" é um filho direto de qualquer coisa que tenha sido lançado em vez de um neto.
Você mencionou também o redirecionamento de E / S em sua pergunta. Esse é um caso de uso bastante diferente de 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
então os redirecionamentos de E / S na linha de comando entram em vigor no processo de shell atual, mas o processo de shell atual continua em execução e passa para o próximo comando no script.