SHELL
[ Process = ] SHELL Command [ WAIT ] [ FOR { { READ | INPUT } | { WRITE | OUTPUT } } ] [ AS Name ]
SHELL Command TO Variable
Exécute une commande dans un "shell" système. Un
objet de
Process interne est créé pour gérer la commande.
Syntaxe standard
La commande est une chaîne contenant une commande passée au shell (
/bin/sh).
- Si WAIT est spécifié, alors l'interpréteur attend que la commande se termine. Sinon, la commande est exécutée en arrière-plan.
- Si FOR est indiqué, alors les commandes d'entrée-sorties sont redirigés de telle sorte que votre programme les intercepte :
- Si WRITE est indiqué, alors vous pouvez envoyer des données à l'entrée standard de commande en utilisant l'objet Process avec les instructions de sortie usuelles : PRINT, WRITE, ... Notez que vous avez besoin d'une référence à l'objet Process pour cela.
- Si READ est indiqué, alors des évènements seront générés chaque fois que la commande envoie des données à son flux de sortie standard : l'Evènement Read est levé quand les données sont envoyées au flux de sortie standard, et l'Evènement Error est levé quand les données sont envoyées au flux d'erreurs standard. Utilisez l'objet de processus avec les Flux & fonctions d'Entrée/Sortie pour lire le processus de sortie standard :
Si vous utilisez les mots clefs
INPUT et
OUTPUT au lieu de
READ et
WRITE, alors le processus est exécuté à l'intérieur d'un terminal virtuel. Ca signifie que le processus pensera être exécuté à l'intérieur d'un vrai terminal.
Name est le nom d'évènement utilisé par l'
objet de
Process. Par défaut, c'est
"Process".
Vous pouvez obtenir une référence à l'
objet de
Process interne créé en utilisant une affectation.
Syntaxe rapide
Si vous utilisez la seconde syntaxe, la commande est exécutée, l'interpréteur attend la fin de la commande, et la sortie de la commande complète est mise dans la chaîne indiquée.
Vous n’avez pas de contrôle sur le processus exécuté.
Exemple
' Récupère le contenu d'un répertoire
SHELL "ls -la /tmp" WAIT
' Même chose, mais en arrière plan
DIM Content AS String
SHELL "ls -la /tmp" FOR READ
...
PUBLIC SUB Process_Read()
DIM sLine AS String
READ #LAST, sLine, -256
Content = Content & sLine
PRINT sLine;
END
 |
Si vous voulez savoir combien d'octets vous pouvez lire dans un gestionnaire d'évènements Process_Read, utilisez la fonction Lof.
|
 |
Comme les arguments sont envoyés à l'interpréteur, vous devez les mettre entre guillemets, comme si vous tapiez une commande directement dans l'interpréteur.
SHELL "perl -e 'print while <>;'" FOR READ WRITE
Vous pouvez aussi utiliser la méthode Quote.Shell pour créer une chaîne entre guillemets qui ne sera pas modifiée par le Shell.
|
 |
Contrairement à l'interpréteur de commande VB, qui retourne un ID de processus et oblige le programmeur à appeler des API pour contrôler le processus, la fonction Shell de Gambas retourne optionnellement un objet Process (si utilisé comme une affectation a une variable déclarée comme Process).
Il peut être utilisé pour tuer directement ou contrôler le processus généré. De plus, le processus peut être lancé de façon synchrone ou asynchrone, à la différence de son équivalent VB.
|