Gambas Documentation
Aperçu du Langage
À traduire
Code Snippets
Comment faire ...
Compilation et installation
Composants
Controls pictures
Derniers changements
Dépôt d'applications
Documentation de l'Environnement de développement
Documentation des développeurs
Documents
Indenter
Index de tous les Documents
Index du langage
#Else
#Endif
#If
+INF
-INF
Abs
Access
ACos
ACosh
Affectations
Alloc
AND
AND IF
Ang
APPEND
AS
Asc
ASin
ASinh
Asl
Asr
Assign
ATan
ATan2
ATanh
BChg
BClr
BEGINS
Bin$
Bool@
Boolean@
Boucle d'évènements
BREAK
BSet
BTst
BYREF
Byte@
CASE
CATCH
CBool
Cbr
CByte
CDate
Ceil
CFloat
Chemins de Fichiers & Répertoires
CHGRP
CHMOD
Choose
CHOWN
Chr$
CInt
CLASS
CLong
CLOSE
Collections Inline
Comp
CONST
Constantes du langage
CONTINUE
Conv$
COPY
Cos
Cosh
CREATE
CREATE PRIVATE
CREATE STATIC
CShort
CSingle
CStr
CVariant
Date
DateAdd
DateDiff
Day
DConv$
DEBUG
DEC
DEFAULT
Deg
Déclaration d'énumération
Déclaration d'évènement
Déclaration de constante
Déclaration de fonctions externes
Déclaration de méthode
Déclaration de propriété
Déclaration de structure
Déclaration de tableau
Déclaration de variable locale
Déclaration de variables
Déclaration Spéciale
DFree
DIM
Dir
DIV
DO
DOWNTO
ELSE
END
ENDIF
ENDS
END SELECT
END STRUCT
END WITH
ENUM
Eof
ERROR
ERROR TO
Eval
Even
EVENT
EXEC
Exist
Exp
Exp2
Exp10
Expm
EXPORT
EXTERN
External Function Management
FALSE
FINALLY
Fix
Float@
Floor
FLUSH
Fonctions de Localisation et Traduction
FOR
FOR EACH
Format$
Formats définis par l'utilisateur
Frac
Free
FUNCTION
Gestionnaires d'évènements globaux
GOTO
Hex$
Hour
Html$
Hyp
IF
IIf
IN
INC
INHERITS
INPUT
INPUT FROM
InStr
Int
Int@
Integer@
IS
IsAscii
IsBlank
IsBoolean
IsDate
IsDigit
IsDir
IsFloat
IsHexa
IsInf
IsInteger
IsLCase
IsLetter
IsLong
IsMissing
IsNaN
IsNull
IsNumber
IsObject
IsPunct
IsSpace
IsUCase
KILL
Labels
LAST
LCase$
Left$
Len
LET
LIBRARY
LIKE
LINE INPUT
LINK
LOCK
Lof
Log
Log2
Log10
Logp
Long@
LOOP
Lsl
Lsr
LTrim$
Mag
Max
ME
Mem$
MEMORY
Méthodes de comparaison
Méthodes spéciales
Mid$
Min
Minute
MkBool$#4
MkBoolean$
MkByte$#4
MkDate$
MKDIR
MkFloat$
MkInt$
MkInteger$
MkLong$
MkPointer$
MkShort$
MkSingle$
MOD
Month
MOVE
NEW
New
NEXT
NOT
Now
NULL
Odd
OPEN
Opérateurs arithmétiques
Opérateurs d'affectation
Opérateurs de chaînes de caractères
Opérateurs logiques
OPTIONAL
OR
Ordre d'évaluation des opérateurs
OR IF
OUTPUT
OUTPUT TO
Pi
PIPE
Pointer@
PRINT
PRIVATE
PROCEDURE
PROPERTY
PUBLIC
QUIT
Quote$
Rad
RAISE
RANDOMIZE
RDir
READ
Realloc
REPEAT
Replace$
Représentation binaire des données
RETURN
Right$
RInStr
RMDIR
Rnd
Rol
Ror
Round
RTrim$
Scan
SConv$
Second
SEEK
Seek
SELECT
Sgn
SHELL
Shell$
Shl
Short@
Shr
Sin
Single@
Sinh
SizeOf
SLEEP
Space$
Split
Sqr
Stat
STATIC
STEP
STOP
STOP EVENT
Str$
String$
String@
StrPtr
STRUCT
SUB
Subst$
SUPER
SWAP
Swap$
Tableaux intégrés
Tan
Tanh
Temp$
THEN
Time
Timer
TO
Tr$
Trim$
TRUE
TRY
TypeOf
Types de données
UCase$
UNLOCK
Unquote$
UNTIL
USE
Utilisation des mots réservés comme identificateur
Val
VarPtr
WAIT
WATCH
Week
WeekDay
WEND
WHILE
WITH
WRITE
XOR
Year
Lexique
LISEZ-MOI
Manuel du wiki
Messages d'erreur
Tutoriels
Wiki License

SHELL

[ Process = ] SHELL Command [ WAIT ] [ FOR { { READ | INPUT } | { WRITE | OUTPUT } } ] [ AS Name ]
SHELL Command TO Variable

Exécute une commande en lançant un process enfant 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.

    Ne pas oublier le mot clef WAIT si vous voulez chaîner les commandes, sinon la seconde commande va démarrer avant la fin de la première !

  • Si FOR est spécifié, alors les commandes d'entrée-sorties sont redirigés de telle sorte que votre programme les intercepte :

    • Si WRITE est spécifié, 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 spécifié, alors des évènements seront générés à chaque fois que la commande envoie des données à son flux de sortie standard : l'évènement Read est levé quand les données sont envoyées au flux de sortie standard, et l'évènement Error est levé quand les données sont envoyées au flux d'erreur standard. Utilisez l'objet process avec les Fonctions de flux et d'entrée/sortie pour lire la sortie standard du process :

    • Si vous utilisez les mots clefs INPUT et OUTPUT à la place de READ et WRITE, alors le processus sera exécuté dans un terminal virtuel. Cela signifie que le processus pensera qu'il est exécuté dans un vrai terminal.

  • Name est le nom d'évènement utilisé par l'objet de Process. Par défaut, c'est "Process".

    Dans Gambas 3, il n’y a plus d’évènement par défaut.

    Autrement dit, vous devez ajouter AS "Process" pour avoir le même comportement que dans Gambas 2.

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é.

Seule la sortie standard du processus est récupérée. La sortie erreur n'est pas redirigée.

Si vous avez besoin de mixer les deux sorties, utilisez la syntaxe de redirection du shell :
Shell "command 2>&1" To Result

Environnement

Vous pouvez spécifier de nouvelles variables d’environnement pour le processus qui tourne en utilisant le mot-clé WITH juste après l’argument de commande :

[ Process = ] SHELL Command WITH Environment ...

Environment est un tableau de chaînes, chacune ayant la forme suivante : : "NAME=VALUE". NAME est le nom de la variable d’environnement, VALUE est sa valeur.

Si vous voulez effacer une variable d’environnement, utilisez simplement la chaîne "NAME=".

Exécuter dans un terminal virtuel

Si le processus est exécuté dans une terminal virtuel, c.-à-d. si vous utilisez la syntaxe FOR INPUT / OUTPUT, vous pouvez envoyer des caractères de contrôle à l’entrée standard du processus : cela produira le même effet que si vous les saisissiez dans un terminal réel. ^C stoppe le processus, ^Z le suspend, etc .. }

Un terminal virtuel a une seule sortie. Par conséquent, la sortie erreur standard du processus en cours est reçue à travers l'évènement Read.

certains programmes ont une interface en ligne de commande qui est seulement accessible s'ils sont lancés dans un terminal virtuel.

Si vous prévoyez de contrôler une application en envoyant des commandes à l'entrée standard alors les tests devraient être menés en dehors de l'IDE (c.-à-d. faire un exécutable et le lancer depuis la ligne de commande) car la console dans l'environnement de développement n'étant pas un vrai terminal virtuel, il causera des résultats inattendus.

Specifier le Shell

Depuis 3.1

Vous pouvez spécifier quel shell est utilisé pour lancer la commande avec la propriété System.Shell.

par défaut, la commande shell est lancée depuis /bin/sh.

Mettre entre guillemets les arguments

Puisque les arguments sont envoyés au shell, vous devez les entourer de guillemets, comme si vous tapiez la commande dans un terminal.

SHELL "perl -e 'print while <>;'" FOR READ WRITE

Ou vous pouvez utiliser la fonction Shell$ pour créer une chaîne entre guillemets qui ne sera pas modifiée par le shell.

Exemples

' Récupère le contenu d'un répertoire et l'envoie sur la sortie standard.
Shell "ls -la /tmp" WAIT

' Récupère le contenu d'un répertoire dans une chaîne
Dim Result As String
   
Shell "ls -la /tmp" To Result

' Récupère le contenu d'un répertoire en arrière-plan
    
Dim Content AS String
    
Shell "ls -la /tmp" For Read As "Process"
    
...
    
Public Sub Process_Read()

  Dim sLine AS String

  sLine = Read #Last, -256

  Result &= sLine
  Print sLine;

End

Si vous voulez savoir combien d'octets vous pouvez lire dans un gestionnaire d'évènement Process_Read, utilisez la fonction Lof.

Contrairement à l'interpréteur de commande VB, qui retourne un ID de processus et se repose sur le programmeur pour appeler des API pour contrôler le processus, la fonction Shell de Gambas retourne facultativement un objet Process (si utilisé comme une affectation à 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.

Voir aussi