Il exec comando sostituisce il processo di shell corrente con il comando specificato. Normalmente, quando si esegue un comando, viene generato un nuovo processo (biforcato). Il exec comando non genera un nuovo processo. Al contrario, il processo corrente viene sovrapposto al nuovo comando. In altre parole, il execcomando viene eseguito al posto della shell corrente senza creare un nuovo processo.
Esistono tre usi più comuni del comando exec:
1. Sostituzione del processo
Esempio-1:
se si apre una nuovabashshell come
$ bash
in pstreeesso si presenta come
├─gnome-terminale
├─bash───bash───pstree
La bashshell precedente è ancora lì e hai una nuova bashshell. Considerando che se si apre una nuova shell bash come,
$ exec bash
gli pstreespettacoli
├─gnome-terminale
├─bash───pstree
Qui il vecchio bashviene sostituito con uno nuovo. È particolarmente utile uscire da più accessi in un solo comando. È più sicuro e sradica la possibilità di lasciare un terminale aperto per errore. Vedi Esci sia da root che da utente con un solo comando
Esempio-2: è possibile aprire un file come
$ exec vi filename.txt
Quando si esce, vinon è necessario chiudere il terminale separatamente poiché la shell è già stata sostituita. Non appena si chiude vi, anche il terminale viene chiuso.
2. Un metodo di reindirizzamento dei descrittori di file all'interno degli script della shell
Il exec comando può essere utilizzato anche negli script di shell in modo dinamico per aprire, chiudere e copiare i descrittori di file. Ciò consente di eseguire il reindirizzamento di STDIN, STDERR, STDOUT e altri descrittori di file su vari file all'interno dello script della shell, anziché sulla stringa di chiamata del comando. Se non si specifica un comando o argomenti, è possibile specificare simboli di reindirizzamento e descrittori di file per eseguire queste funzioni.
Supponi di avere uno script shell script.shche desideri disporre di un file di registro script.log, che puoi utilizzare execcome,
LOG=/path/to/script.log
exec 1>>$LOG
exec 2>&1
che equivale a
./script &>> /path/to/script.log
./script >> /path/to/script.log 2>&1
3. Creazione delle fasi del processo utilizzando il comando exec
È inoltre possibile utilizzare il comando exec per creare un set di script shell che si eseguono l'un l'altro in sequenza come fasi del processo. Invece di generare nuovi processi ogni volta che è necessario trasferire il controllo allo script successivo, si esegue il comando exec.
In questo caso, l'ultima istruzione di ogni fase dovrebbe essere un execcomando che invoca la fase successiva.
Vedi di più sugli usi del execcomando negli script di shell .
Nota: parte di cui sopra è tratta da questo.