SHELL
[ Process = ] SHELL Command [ WAIT ] [ FOR { { READ | INPUT } | { WRITE | OUTPUT } } ] [ AS Name ]
SHELL Command TO Variable
执行一条命令行,创建一个内部
Process对象来管理命令行。
命令行包含在一个字符串中被传递给系统命令行解释器(
/bin/sh)。
- 如果指定WAIT,那么解释器等待命令行结束,否则命令行在后台执行。
- 如果指定FOR,那么重定向命令行输入输出,所以程序可以截获它们:
如果使用
INPUT和
OUTPUT关键字替换
READ和
WRITE,进程被执行在虚拟终端中。 这意味着进程认为自己运行在真正的终端中。
Name是
Process对象使用的
事件名。缺省是“
Process”。
用赋值语句可以创建一个对内部
Process对象的引用。
如果使用第二种语法执行命令行,解释器等待其结束,并且完整的命令行输出会保存在指定的字符串中。
Example
' 获取目录的内容
SHELL "ls -la /tmp" WAIT
' 在后台完成同样的工作
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
 |
使用Lof函数可以获知在Process_Read事件处理中能读取多少字节。
|
 |
作为发送给命令行解释器的参数,不得不引证它们,就像在命令行上直接键入一样。
SHELL "perl -e 'print while <>;'" FOR READ WRITE
或者可以使用Quote.Shell方法来创建一个命令行解释器不进行修改的引证字符串。
|
 |
与VB的Shell命令的返回进程ID和依赖程序员使用API调用来控制进程不同,GambasShell函数选择返回一个能直接杀死产生的进程或者进行其它控制的Process对象(如果被赋值给声明为Process类型的变量)。另外与VB形成对照的是进程可以同步或者异步运行。
|