• Aucun résultat trouvé

La commande eof (end of file, fin de fichier) permet de tester si la condition de fin de fichier est atteinte sur un canal particulier.

Syntaxe

eof Canal

Description

La valeur renvoy´ee sera 1 si une condition de fin de fichier a ´et´e rencontr´ee au cours de la plus r´ecente op´eration d’entr´ee effectu´ee sur le canal Canal (au moyen d’une commande gets par exemple) et 0 sinon.

error

La commande error permet de g´en´erer une erreur.

Syntaxe

error Message?Info??Code?

Description

Cette commande renvoie un code interne de valeur TCL ERROR qui interrompt l’interpr´etation des commandes. L’argument Message est une chaˆıne qui sera ren- voy´ee `a l’application pour indiquer ce qui s’est pass´e. Si l’argument optionnel Info est sp´ecifi´e et est non vide, il est utilis´e pour initialiser la variable globale de Tcl errorInfo. Cette variable interne est utilis´ee pour accumuler une trace dans la pile de ce qui ´etait en cours d’ex´ecution lorsque l’erreur s’est produite. En d´eroulant toutes les commandes imbriqu´ees de la pile, l’interpr´eteur ajoute des informations `a la variable errorInfo. La commande qui contient une instruction error n’apparaˆıt pas dans la variable errorInfo : `a sa place on trouvera la chaˆıne repr´esent´ee par l’argument Info. On utilise ce m´ecanisme en conjonction avec la commande catch comme ceci :

catch {...} errMsg set infoPrec $errorInfo ...

error $errMsg $infoPrec

De la sorte, le code fautif repr´esent´e par {...} provoque une erreur qui est cap- tur´ee par catch. La commande catch place le message de l’erreur captur´ee dans la variable errMsg, le contenu actuel de la variable interne errorInfo est stock´e dans une variable provisoire infoPrec puis l’instruction avec la commande error a pour effet de cumuler les messages contenus dans les variables errMsg et infoPrec et de les transmettre via la variable errorInfo. De fil en aiguille toute la s´erie des fonctions qui ont pu ˆetre appel´ees est parcourue en sens inverse jusqu’`a ce que le message parvienne `a l’utilisateur.

Si l’argument Code est sp´ecifi´e, sa valeur sera stock´ee dans la variable glo- bale interne errorCode qui est destin´ee `a contenir des descriptions de l’erreur compr´ehensibles par la machine pour le cas o`u une telle information serait dispo- nible. En l’absence de l’argument Code la variable errorCode est automatiquement remise `a la valeur NONE par l’interpr´eteur Tcl.

. eval 50

eval

La commande eval ´evalue un script Tcl.

Syntaxe

eval Arg?Arg...?

Description

Cette commande admet un ou plusieurs arguments qui, mis ensemble, consti- tuent un script Tcl comprenant une ou plusieurs commandes. La commande conca- t`ene ses arguments de la mˆeme fa¸con que la commande concat puis les passe `a l’interpr´eteur et transmet le r´esultat de leur ´evaluation ou une erreur ´eventuelle.

exec

La commande exec permet de faire ex´ecuter des sous-processus depuis un script Tcl.

Syntaxe

exec?Commutateurs? Arg?Arg...?

Description

Cette commande traite ses arguments comme une ligne de commande du shell d´ecrivant un ou plusieurs processus `a faire ex´ecuter. Les arguments repr´esentent donc une s´erie de commandes chaˆın´ees (pipeline) dont chaque ´el´ement est un sous- processus.

Cette ligne de commandes peut ˆetre pr´ec´ed´ee par des options commen¸cant par un tiret et qui ne font pas partie de la d´efinition du pipeline. Les options admises sont les suivantes :

-keepnewline

Avec cette option les symboles de fin de ligne ne seront pas ´elimin´es de la sortie produite par le pipeline. Normalement ils le sont.

--

Indique la fin des options. Tout ce qui suit constitue la partie des arguments Arg.

Une autre convention veut que si un argument (ou une paire d’arguments) prend l’une des formes suivantes il sera utilis´e par la commande exec pour contrˆoler le flux des entr´ees et des sorties entre les processus chaˆın´es par le pipeline. Ce sont les symboles de redirection habituels sur les syst`emes de type Unix :

S´epare des commandes distinctes dans le pipeline. La sortie standard de la commande qui pr´ec`ede la barre verticale est branch´ee sur l’entr´ee standard de la commande qui suit.

—&

S´epare des commandes distinctes dans le pipeline. `A la fois la sortie standard et le canal d’erreurs standard de la commande qui pr´ec`ede la barre verticale seront branch´es sur l’entr´ee standard de la commande qui suit. Cette forme de redirection a la pr´ec´edence sur des instructions de la forme 2> et >&. < NomFichier

Le fichier nomm´e NomFichier est ouvert et utilis´e comme entr´ee standard pour la premi`ere commande du pipeline.

<@ IdFichier

. exec 52 l’ouverture d’un fichier avec la commande open. Ce fichier sera utilis´e comme entr´ee standard pour la premi`ere commande du pipeline. Il faut que le fichier soit ouvert en lecture ´evidemment.

<< Valeur

L’argument Valeur est pass´e `a la premi`ere commande du pipeline pour lui servir d’entr´ee standard.

> NomFichier

La sortie standard de la derni`ere commande du pipeline est dirig´ee vers le fichier nomm´e NomFichier dont le contenu sera ´ecras´e par les nouvelles donn´ees.

2> NomFichier

Le canal d’erreurs standard de chacune des commandes du pipeline est re- dirig´e vers le fichier nomm´e NomFichier dont le contenu sera ´ecras´e par les nouvelles donn´ees.

>& NomFichier `

A la fois le canal de sortie et le canal d’erreurs de toutes les commandes du pipeline sont redirig´es vers le fichier nomm´e NomFichier dont le contenu sera ´ecras´e par les nouvelles donn´ees.

>> NomFichier

La sortie standard de la derni`ere commande du pipeline est dirig´ee vers le fichier nomm´e NomFichier et les nouvelles donn´ees sont ajout´ees au contenu d´ej`a existant plutˆot que de l’´ecraser.

2>> NomFichier

La sortie d’erreurs standard de chacune des commandes du pipeline est redi- rig´ee vers le fichier nomm´e NomFichier et les nouvelles donn´ees sont ajout´ees au contenu d´ej`a existant plutˆot que de l’´ecraser.

>>& NomFichier `

A la fois le canal de sortie et le canal d’erreurs de toutes les commandes du pipeline sont redirig´es vers le fichier nomm´e NomFichier et les nouvelles donn´ees sont ajout´ees au contenu d´ej`a existant plutˆot que de l’´ecraser. >@ IdFichier

L’argument IdFichier doit ˆetre le num´ero d’identification tel qu’on l’obtient `a l’ouverture d’un fichier avec la commande open. La sortie standard de la derni`ere commande est redirig´ee vers le fichier d’identificateur IdFichier qui devra bien entendu ˆetre ouvert en ´ecriture.

2>@ IdFichier

L’argument IdFichier doit ˆetre le num´ero d’identification tel qu’on l’obtient `a l’ouverture d’un fichier avec la commande open. La sortie d’erreurs standard de toutes les commandes du pipeline est redirig´ee vers le fichier d’identifica- teur IdFichier qui devra bien entendu ˆetre ouvert en ´ecriture.

>&@ IdFichier

L’argument IdFichier doit ˆetre le num´ero d’identification tel qu’on l’obtient `a l’ouverture d’un fichier avec la commande open. `A la fois le canal de sortie et la sortie d’erreurs de toutes les commandes du pipeline sont redirig´es vers

le fichier d’identificateur IdFichier qui devra bien entendu ˆetre ouvert en ´ecriture.

Dans toutes les commandes de la forme < NomFichier, l’argument NomFichier peut ˆetre indiff´eremment accol´e au symbole < ou bien s´epar´e par des espaces.

Si la sortie standard n’a pas ´et´e redirig´ee alors la valeur de retour de la com- mande exec sera pr´ecis´ement la sortie standard de la derni`ere commande du pipe- line.

Si l’un quelconque des processus chaˆın´es dans le pipeline est tu´e ou suspendu ou bien s’interrompt anormalement, alors la commande exec renverra une er- reur et le message d’erreur contiendra la sortie du pipeline suivie des messages d’erreur d´ecrivant l’incident. La variable errorCode contiendra des informations suppl´ementaires concernant la derni`ere anomalie rencontr´ee. D’autre part si l’un quelconque des processus ´ecrit sur sa sortie d’erreur standard et que celle-ci n’a pas ´et´e redirig´ee alors exec renverra une erreur ; le message d’erreur contiendra la sortie standard produite par le pipeline suivie de messages concernant l’anomalie puis de la sortie d’erreurs.

Si le dernier caract`ere du r´esultat est un symbole de fin de ligne, il sera ´elimin´e comme c’est le cas en g´en´eral avec les valeurs de retour de Tcl. On peut inverser ce comportement en utilisant l’option -keepnewline.

Si l’entr´ee standard n’est pas dirig´ee au moyen d’un des symboles <, << ou <@ alors elle sera prise depuis l’entr´ee standard de l’application elle-mˆeme.

Si le dernier argument du pipeline est & alors celui-ci sera ex´ecut´e en tˆache d’arri`ere-plan. Dans ce cas, la valeur de retour de la commande exec sera la liste des identificateurs de processus de tous les processus du pipeline. La sortie standard du dernier processus ira `a la sortie standard de l’application si elle n’a pas ´et´e redirig´ee, de mˆeme pour la sortie d’erreur.

Le premier terme de chaque commande est pris comme le nom de la commande. Il y a substitution des symboles tilde ´eventuels et s’il n’y a aucun s´eparateur / alors ce sont les r´epertoires contenus dans la variable d’environnement PATH qui seront visit´es pour rechercher un ex´ecutable de ce nom. Si le nom contient un s´eparateur / alors il doit faire r´ef´erence `a un ex´ecutable du r´epertoire courant. Aucun autre type de substitution n’est op´er´e.

Portabilit´e

Les diff´erentes plate-formes pr´esentent quelques particularit´es relatives `a la com- mande exec.

Windows (toutes versions)

La lecture ou l’´ecriture depuis un canal de connexion (socket) en utilisant la notation @IdFichier ne marche pas. La console Tk n’a pas de r´eelles capa- cit´es d’entr´ee et de sortie : depuis l’entr´ee standard les applications re¸coivent uniquement un symbole de fin de fichier et l’information redirig´ee en sortie est perdue.

. exec 54 Aussi bien les barres obliques que les contre-obliques sont accept´ees comme s´eparateurs de noms de chemin par les commandes Tcl. Mais il faut tenir compte de ce que, pour la plupart des applications Windows, les barres obliques sont utilis´ees comme s´eparateurs d’options et les contre-obliques commes s´eparateurs dans les noms de fichier. Il faut donc veiller `a utiliser les bons s´eparateurs attendus par les processus eux-mˆemes.

Avec des applications MS-DOS 16-bit ou bien les anciens syst`emes Windows 3.x, tous les chemins doivent utiliser le format 8.3 de noms de fichiers et de r´epertoires.

Deux barres obliques ou bien contre-obliques successives d´esignent des adresses de r´eseau. C’est une source potentielle d’erreurs : la simple concat´enation du r´epertoire racine c:/ avec un sous-r´epertoire /windows/system conduirait `a c://windows/system qui d´esigne le point de montage nomm´e system sur une machine nomm´ee windows (et du coup le c:/ sera ignor´e) et non pas le r´epertoire c:/windows/system, de la machine locale. On aura int´erˆet `a utili- ser plutˆot la commande Tcl file join pour r´eunir des composantes de nom de fichier.

Windows NT

Pour ex´ecuter une application sous WindowsNT, la commande exec recherche d’abord avec le nom sp´ecifi´e. Puis ensuite, si elle ne trouve pas d’ex´ecutable, elle ajoute dans l’ordre les extensions .com, .exe et .bat. Si un nom de r´epertoire n’a pas ´et´e sp´ecifi´e la recherche se fera dans l’ordre dans les r´epertoires sui- vants :

– le r´epertoire depuis lequel l’application Tcl a ´et´e lanc´ee – le r´epertoire courant

– le r´epertoire syst`eme Windows NT 32-bit – le r´epertoire syst`eme Windows NT 16-bit – le r´epertoire home

– les r´epertoires list´es dans le chemin

Pour ex´ecuter des commandes shell internes telles que dir ou copy, il faudra les pr´efixer avec l’expression cmd.exe /c.

Windows 95

Pour ex´ecuter une application sous Windows 95, la commande exec recherche d’abord avec le nom sp´ecifi´e. Puis ensuite, si elle ne trouve pas d’ex´ecutable, elle ajoute dans l’ordre les extensions .com, .exe et .bat. Si un nom de r´epertoire n’a pas ´et´e sp´ecifi´e la recherche se fera dans l’ordre dans les r´epertoires sui- vants :

– le r´epertoire depuis lequel l’application Tcl a ´et´e lanc´ee – le r´epertoire courant

– le r´epertoire syst`eme Windows 95 – le r´epertoire home

Pour ex´ecuter des commandes shell internes telles que dir ou copy, il faudra les pr´efixer avec l’expression command.exe /c.

Si une application MS-DOS 16-bit a lu depuis l’entr´ee standard et a ensuite quitt´e, toutes les applications MS-DOS 16-bit qui suivent trouveront le canal d’entr´ee ferm´e. Les applications 32-bits n’auront pas ce probl`eme et fonction- neront correctement.

Une redirection entre le p´eriph´erique NUL: et une application 16-bit ne marche pas toujours. Les r´esultats peuvent ˆetre impr´evisibles et de toutes fa¸cons d´esastreux.

Toutes les applications 16-bit sont ex´ecut´ees de mani`ere synchrone. Toute entr´ee standard envoy´ee par un tube (pipe) `a une application 16-bit est col- lect´ee dans un fichier temporaire ; l’autre extrˆemit´e du tube doit ˆetre ferm´ee avant que l’application 16-bit ne commence son ex´ecution. Inversement, toute sortie standard ou d’erreur depuis une application 16-bit vers un tube est col- lect´ee dans des fichiers temporaires ; l’application 16-bit doit avoir termin´e avant que les fichiers temporaires ne soient envoy´es vers la suite du pipeline. Ceci est dˆu `a un bogue dans l’impl´ementation des tubes avec Windows 95 et c’est d’ailleurs ainsi que le shell DOS de Windows 95 manipule les tubes. Certaines applications telles que command.com ne devraient pas ˆetre ex´ecu- t´ees interactivement. Des applications qui acc`edent directement `a la console plutˆot que de lire depuis une entr´ee standard et d’´ecrire sur une sortie stan- dard peuvent ´echouer, figer Tcl ou le syst`eme lui-mˆeme.

Macintosh

La commande exec n’est pas impl´ement´ee sur les versions du syst`eme Ma- cintosh ant´erieures `a MacOSX car le concept de pipeline n’y existe pas. Unix

La commande exec est pleinement fonctionnelle sur les syst`emes Unix sans restrictions.

. exit 56

exit

La commande exit a pour effet de terminer l’application en cours d’ex´ecution et de quitter le programme tclsh ou wish.

Syntaxe

exit?CodeRetour?

Description

On met fin inconditionnellement `a l’ex´ecution d’un script ou d’une application au moyen de la commande exit et on peut ´eventuellement transmettre une valeur de retour CodeRetour `a l’attention du syst`eme (ou du shell sur des syst`emes Unix). Par d´efaut la valeur renvoy´ee est 0.

expr