====== exec ======
Appelle un ou des sous-processus
===== Syntaxe =====
exec ?switches? arg ?arg ...?
===== Description =====
Cette commande traite ses arguments comme la spécification d'exécution d'un ou plusieurs sous-processus. Les arguments prennent la forme d'un pipeline shell standard où chaque arg devient un mot d'une commande, et chaque commande distincte devient un sous-processus.
Si les arguments initiaux à exec commencent avec un tiret alors ils sont traités comme des commutateurs de ligne de commande et ne font pas partie du pipeline. Les commutateurs suivants sont couramment supportés:
* **-keepnewline** Insère un saut de ligne dans la sortie de pipeline. Normalement le saut de ligne sera effacé.
* **--** Marque la fin des commutateurs. L'argument suivant sera traité comme le premier arg même s'il commence avec un tiret.
Si un arg (ou paire d'args) a une des formes décrites ci-dessous alors il est utilisé par exec pour contrôler les flux d'entrée et de sortie dans le(s) sous-processus. Ces arguments ne seront pas transmis au(x) sous-processus. Sous les formes telles que "< fileName", fileName peut soit être dans un argument séparé de "<" ou dans le même argument sans espace (ex. "2> et >&.
* `< fileName` Le fichier désigné par fileName est ouvert et utilisé comme l'entrée standard pour le première commande dans le pipeline.
* `<@ fileId` FileId doit être l'identificateur pour un fichier ouvert, tel que la valeur de retour d'un précédent appel de open. Il est utilisé comme l'entrée standard de la première commande dans le pipeline. FileId doit avoir été ouvert en lecture.
* `<< value` Value est transmise à la première commande comme son entrée standard.
* `> fileName` La sortie standard de la dernière commande est redirigée sur un fichier nommé fileName, en écrasant son précedent contenu.
* `2> fileName` L'erreur standard de toute commande dans le pipeline est redirigée sur un fichier nommé fileName, en écrasant son précedent contenu.
* `>& fileName` L'ensemble sortie standard de la dernière commande et erreur standard de toute commande sont redirigée sur un fichier nommé fileName, en écrasant son contenu précédent.
* `>> fileName` La sortie standard de la dernière commande est redirigée et ajoutée à la fin d'un fichier nommé fileName.
* `2>> fileName` L'erreur standard de toute commande dans le pipeline est redirigée et ajoutée à la fin d'un fichier nommé fileName.
* `>>& fileName` L'ensemble sortie standard de la dernière commande et erreur standard de toute commande sont redirigées et ajoutées à la fin d'un fichier nommé fileName.
* `>@ fileId` FileId doit être l'identificateur d'un fichier ouvert, tel que la valeur de retour d'un précédent appel de open. La sortie standard de la dernière commande est redirigée vers le fichier'' 'fileIds, qui doit avoir été ouvert en écriture.
* `2>@ fileId` FileId doit être l'identificateur d'un fichier ouvert, tel que la valeur de retour d'un précédent appel de open. L'erreur standard de toute commande dans le pipeline est redirigée vers le fichier fileId. Le fichier doit avoir été ouvert en écriture.
* `>&@ fileId` FileId doit être l'identificateur pour un fichier ouvert, tel que la valeur de retour d'un précédent appel de open. L'ensemble sortie standard de la dernière commande et erreur standard from toute commande sont redirigée vers le fichier fileId. Le fichier doit avoir été ouvert en écriture.
Si la sortie standard n'a pas été redirigée alors la commande exec retourne la sortie standard de la dernière commande dans le pipeline. Si une des commandes dans le pipeline finit anormalement ou est killed ou suspendue, alors exec renverra une erreur et le message d'erreur inclura la sortie du pipeline suivi par le message d'erreur décrivant la terminaison anormale; la variable errorCode contiendra des informations supplémentaires concernant la dernière terminaison anormale rencontrée. Si une des commandes écrit vers son fichier standard d'erreur et que cette erreur standard n'est pas redirigée, alors exec renverra une erreur; le message d'erreur inclura la sortie standard du pipeline, suivi par les messages au sujet de la terminaison anormale (si elle existe), suivi par la sortie d'erreur standard .
Si le dernier caractère du résultat ou du message d'erreur est un saut de ligne alors ce caractère est normalement effacé du résultat ou du message d'erreur. Ceci est cohérent par rapport aux autres valeurs de retour Tcl, qui ne finissent normalement pas avec des sauts de ligne. Néanmoins, si **-keepnewline** est spécifié alors le saut de ligne est ajouté.
Si l'entrée standard n'est pas redirigée avec `<` ou `<<` ou `<@` alors l'entrée standard pour la première commande dans le pipeline est prise de l'entrée standard de l'application courante.
Si le dernier arg est `&` alors le pipeline sera exécuté en arrière-plan. Dans ce cas la commande exec renverra une liste dont les éléments sont les identificateurs de processus pour tous les sous-processus dans le pipeline. La sortie standard de la dernière commande dans le pipeline ira dans la sortie standard de l'application si elle n'a pas été redirigée, et la sortie d'erreur de toutes les commandes dans le pipeline ira vers le fichier standard d'erreur de l'application sauf si elle est redirigée.
Le premier mot de chaque commande est interprété comme le nom de la commande; la substitution tilde est effectuée, et si le résultat ne contient pas de slashes alors les répertoires dans la variable d'environnement PATH sont recherchés pour un exécutable donnés. Si le nom contient un slash alors il doit se référer à un exécutable accessible du répertoire courant. Aucune expansion "glob" ou autre substitutions shell-like ne sont effectuées sur les arguments des commandes.
===== Exemples =====
===== Voir aussi =====
{{tag>tcl}}