La exec commande remplace le processus shell actuel par la commande spécifiée. Normalement, lorsque vous exécutez une commande, un nouveau processus est généré (bifurqué). La exec commande ne génère pas de nouveau processus. Au lieu de cela, le processus en cours est superposé avec la nouvelle commande. En d'autres termes, la execcommande est exécutée à la place du shell actuel sans créer de nouveau processus.
Il existe trois utilisations les plus courantes de la commande exec:
1. Remplacement du processus
Exemple 1:
si vous ouvrez un nouveaubashshell en tant que
$ bash
en pstreeelle ressemble
├─gnome-terminal
├─bash───bash───pstree
Le bashshell précédent est toujours là et vous avez obtenu un nouveau bashshell. Alors que si vous ouvrez un nouveau shell bash comme,
$ exec bash
les pstreespectacles
├─gnome-terminal
├─bash───pstree
Ici, l'ancien bashest remplacé par un nouveau. Il est particulièrement utile de quitter plusieurs connexions en une seule commande. Il est plus sécurisé et supprime les chances de quitter un terminal ouvert par erreur. Voir Quitter à la fois root et user avec une seule commande
Exemple-2: vous pouvez ouvrir un fichier en tant que
$ exec vi filename.txt
Lorsque vous quittez, viil n'est pas nécessaire de fermer le terminal séparément car le shell est déjà remplacé. Dès que vous fermez le vi, le terminal est également fermé.
2. Une méthode de redirection des descripteurs de fichiers dans les scripts shell
La exec commande peut également être utilisée dans des scripts shell pour ouvrir, fermer et copier dynamiquement des descripteurs de fichiers. Cela permet d'effectuer une redirection de STDIN, STDERR, STDOUT et d'autres descripteurs de fichiers vers divers fichiers à l'intérieur du script shell, au lieu de la chaîne d'invocation de commande. Si vous ne spécifiez pas de commande ou d'arguments, vous pouvez spécifier des symboles de redirection et des descripteurs de fichier pour exécuter ces fonctions.
Disons que vous avez un script shell que script.shvous souhaitez avoir un fichier journal script.log, vous pouvez utiliser en exectant que,
LOG=/path/to/script.log
exec 1>>$LOG
exec 2>&1
ce qui équivaut à
./script &>> /path/to/script.log
./script >> /path/to/script.log 2>&1
3. Création d'étapes du processus à l'aide de la commande exec
Vous pouvez également utiliser la commande exec pour créer un ensemble de scripts shell qui s'exécutent séquentiellement comme les étapes du processus. Au lieu de générer de nouveaux processus chaque fois que vous devez transférer le contrôle vers le script suivant, vous exécutez la commande exec.
Dans ce cas, la dernière instruction de chaque étape doit être une execcommande qui appelle l'étape suivante.
Voir les utilisations de la execcommande dans les scripts shell pour en savoir plus.
Remarque: une partie de ce qui précède est tirée de cela.