SHELL
[ Proces = ] SHELL Komanda [ WAIT ] [ FOR { { READ | INPUT } | { WRITE | OUTPUT } } ] [ AS Ime ]
SHELL Komanda TO Promenliva
Извршува команда. За управување со командата се создава интерен
процесен објект.
Командата е стринг што ја содржи командата што се проследува до системската лушпа (
/bin/sh).
- Ако е наведено WAIT, интерпретерот чека до завршувањето на командата, инаку командата се извршува во заднина.
- Ако е наведено FOR, влезовите/излезите од командата се пренасочуваат така што програмата може да ги пресретне:
- Ако е наведено WRITE, можете да испратите податоци до стандардниот влез преку процесниот објект со помош на вообичаените инструкции за излез: PRINT, WRITE... Забележете дека за тоа ви е потребна референца до процесниот објект.
- Ако е наведено READ, тогаш ќе се генерираат настани секогаш кога командата ќе испрати настани до стандардниот излезен поток, а настанот Error се објавува кога ќе се испратат податоци на стандардниот поток за грешка. За да го прочитате стандардниот излез на процесот, користете процесен објект со поток.
Ако ги користите командните зборови
INPUT и
OUTPUT наместо
READ и
WRITE, процесот се извршува во виртуелен терминал. Тоа значи дека процесот ќе мисли дека се извршува во вистински терминал.
Ime е името на настанот што го користи процесниот објект. Стандардно, тоа е
"Process".
Референца до создадениот процесен објект можете да добиете со доделување.
Ако ја користите втората синтакса, тогаш командата се извршува, интерпретаторот чека таа да заврши и целиот излез од командата се запишува во наведениот стринг.
Example
' Izlistaj sodrzina na direktorium
SHELL "ls -la /tmp" WAIT
' Istoto, no vo zadnina
DIM Sodrzina AS String
EXEC "ls -la /tmp" FOR READ
...
PUBLIC SUB Process_Read()
DIM sRed AS String
READ #LAST, sRed, -256
Sodrzina = Sodrzina & sRed
PRINT sRed;
END
 |
Колку бајти можете да прочитате во ракувачот на настани Process_Read можете да дознаете со функцијата Lof.
|
 |
Бидејќи аргументите се проследуваат до командната лушпа, морате да ги ставите во наводници, како и кога директно внесувате команда.
SHELL "perl -e 'print while <>;'" FOR READ WRITE
А можете да го употребите и методот Quote.Shell за да создадете стринг со наводници што нема да биде сменет од страна на лушпата.
|
 |
За разлика од командата Shell од Visual Basic, која бара ID на процесот и се потпира врз програмерот за да изврши API за контрола на процесот, Gambas Shell функцијата опционо враќа процесен објект (ако се употреби како доделување на променлива декларирана како процес) што може да се искористи за директно уништување или друг вид на контрола на активираниот процес. Освен тоа, процесот може да се активира синхроно или асинхроно, за разлика од еквивалентот на Visual Basic.
|