Usar exec
torna o wrapper mais transparente, ou seja, é menos provável que o usuário ou aplicativo que chama o script precise estar ciente de que é um revezamento que, por sua vez, inicia o programa "real".
Em particular, se o chamador quiser matar o programa, ele simplesmente matará o processo que acabou de lançar. Se o script wrapper executar um processo filho, o chamador precisará saber que ele deve descobrir o filho do wrapper e eliminá-lo. O script wrapper poderia definir uma armadilha para retransmitir alguns sinais, mas isso não funcionaria com SIGSTOP ou SIGKILL, o que não pode ser detectado.
Chamar exec
também economiza um pouco de memória (e outros recursos, como PIDs, etc.), já que não há necessidade de manter um shell extra sem nada a fazer.
Se houver vários wrappers, os problemas se somam (dificuldade em encontrar o processo correto para matar, sobrecarga de memória, etc.).
Alguns shells (por exemplo, o shell Korn) detectam automaticamente quando um comando é o último e não há interceptação ativa e coloca um implícito exec
, mas nem todos fazem (por exemplo, não bash).