O exec comando substitui o processo atual do shell pelo comando especificado. Normalmente, quando você executa um comando, um novo processo é gerado (bifurcado). O exec comando não gera um novo processo. Em vez disso, o processo atual é sobreposto ao novo comando. Em outras palavras, o execcomando é executado no lugar do shell atual sem criar um novo processo.
Existem três usos mais comuns do comando exec:
1. Substituição do processo
Exemplo-1:
Se você abrir um novobashshell como
$ bash
no pstreeque parece
├─gnome-terminal
├─bash───bash───pstree
O bashshell anterior ainda está lá e você tem um novo bashshell. Considerando que, se você abrir um novo shell bash como,
$ exec bash
os pstreeshows
├─gnome-terminal
├─bash───pstree
Aqui o antigo bashé substituído por um novo. É particularmente útil sair do login múltiplo em um comando. É mais seguro e erradica a chance de deixar um terminal aberto por engano. Consulte Sair da raiz e do usuário com um comando
Exemplo-2: você pode abrir um arquivo como
$ exec vi filename.txt
Quando você sai, vinão há necessidade de fechar o terminal separadamente, pois o shell já foi substituído. Assim que você fechar o vi, o terminal também será fechado.
2. Um método de redirecionamento de descritores de arquivos nos scripts de shell
O exec comando também pode ser usado em scripts de shell, abrir, fechar e copiar dinamicamente descritores de arquivos. Isso permite executar o redirecionamento de STDIN, STDERR, STDOUT e outros descritores de arquivo para vários arquivos dentro do script de shell, em vez da cadeia de chamada de comando. Se você não especificar um comando ou argumentos, poderá especificar símbolos de redirecionamento e descritores de arquivo para executar essas funções.
Digamos que você tenha um script de shell script.shque deseja ter um arquivo de log script.log, você pode usar execcomo,
LOG=/path/to/script.log
exec 1>>$LOG
exec 2>&1
que é equivalente a
./script &>> /path/to/script.log
./script >> /path/to/script.log 2>&1
3. Criando estágios do processo usando o comando exec
Você também pode usar o comando exec para criar um conjunto de scripts de shell que se executam sequencialmente como estágios do processo. Em vez de gerar novos processos toda vez que você precisar transferir o controle para o próximo script, execute o comando exec.
Nesse caso, a última instrução de cada estágio deve ser um execcomando que chama o próximo estágio.
Veja os usos do execcomando nos scripts de shell para mais.
Nota: Parte do acima é tirada disso.