Gambas文档
编译和安装
错误消息
代码片段
翻译
废弃的组件
教程
开发环境文档
开发文档
名词解释
如何操作
说明
维基手册
维基搜索
维基许可协议
文档
应用程序仓库
语言概览
语言索引
#Else
#Endif
#If
+INF
-INF
Abs
Access
ACos
ACosh
Alloc
AND
AND IF
Ang
APPEND
AS
Asc
ASin
ASinh
Asl
Asr
ASSERT
ATan
ATan2
ATanh
Base$
Base64$
BChg
BClr
BEGINS
Bin$
Boolean@
BREAK
BSet
BTst
BYREF
Byte@
CASE
CATCH
CBool
Cbr
CByte
CDate
Ceil
CFloat
CHGRP
CHMOD
Choose
CHOWN
Chr$
CInt
CLASS
CLong
CLOSE
Comp
CONST
CONTINUE
Conv$
COPY
Cos
Cosh
CPointer
CREATE
CREATE PRIVATE
CREATE STATIC
CShort
CSingle
CStr
CString
CVariant
Date
Date@
DateAdd
DateDiff
Day
DConv$
DEBUG
DEC
Dec
DEFAULT
Deg
DFree
DIM
Dir
DIV
DO
DOWNTO
EACH
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
FALSE
FAST
FAST UNSAFE
FINALLY
Fix
Float@
Floor
FLUSH
FOR
FOR EACH
Format$
Frac
Free
FromBase
FromBase64$
FromUrl$
FUNCTION
GOSUB
GOTO
Hex$
Hour
Html$
Hyp
IF
IIf
IN
INC
INCLUDE or #INCLUDE
INHERITS
INPUT
INPUT FROM
InStr
Int
Int@
Integer@
IS
IsAlnum
IsAscii
IsBlank
IsBoolean
IsDate
IsDigit
IsDir
IsFloat
IsHexa
IsInf
IsInteger
IsLCase
IsLetter
IsLong
IsLower
IsMissing
IsNaN
IsNull
IsNumber
IsPunct
IsSpace
IsUCase
IsUpper
KILL
LAST
LCase$
Left$
Len
LET
LIBRARY
LIKE
LINE INPUT
LINK
LOCK
Lof
Log
Log2
Log10
Logp
Long@
LOOP
Lsl
Lsr
LTrim$
Mag
MATCH
Max
ME
Mid$
Min
Minute
MkBool$
MkBoolean$
MkByte$
MkDate$
MKDIR
MkFloat$
MkInt$
MkInteger$
MkLong$
MkPointer$
MkShort$
MkSingle$
MOD
Month
MOVE
NEW
NEXT
NOT
Now
NULL
Oct$
Odd
ON GOSUB
ON GOTO
OPEN
OPEN MEMORY
OPEN MEMORY
OPEN NULL
OPEN PIPE
OPEN PIPE
OPEN STRING
OPTIONAL
OR
OR IF
OUTPUT
OUTPUT TO
PEEK
Pi
Pointer@
PRINT
PRIVATE
PROCEDURE
PROPERTY
PUBLIC
QUIT
Quote$
Rad
RAISE
Rand
RANDOMIZE
RDir
READ
Realloc
REPEAT
Replace$
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$
Str@
String$
String@
StrPtr
STRUCT
SUB
Subst$
SUPER
SWAP
Tan
Tanh
Temp$
THEN
Time
Timer
TO
Tr$
Trim$
TRUE
TRY
TypeOf
UCase$
UnBase64$
UNLOCK
Unquote$
UNTIL
Url$
USE
Val
VarPtr
WAIT
WATCH
Week
WeekDay
WEND
WHILE
WITH
WRITE
XOR
Year
本地化和翻译函数
变量声明
常量表达式
常量声明
方法声明
复数
赋值
赋值操作
行标号
结构体声明
局部变量声明
逻辑运算
枚举声明
内置集合
内置数组
使用保留字作为标识符
事件声明
事件循环
属性声明
数据类型
数据类型的二进制表示形式
数组声明
算术运算
外部函数管理
外部函数声明
语言常量
运算符优先级
专用方法
字符串操作
主题
组件
最近的修改

SHELL

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

执行一条命令行,创建一个内部 Process 来管理命令行。

Standard syntax

命令行包含在一个字符串中被传递给系统命令行解释器 (/bin/sh) 。

  • 如果指定 WAIT ,那么解释器等待命令行结束,否则命令行在后台执行。

  • 如果指定 FOR ,那么重定向命令行输入输出,所以程序可以截获它们:

    • 如果指定 WRITE ,可以用 Process 的通用输出语句(PRINTWRITE、...)发送数据到命令行的标准输入。注意,为了能够这样做,需要一个Process的引用。

    • 如果指定 READ ,每次命令行发送数据到其标准输出流时将有事件发生:当数据被发送到标准输出流时事件Read事件发生,当数据被送到标准错误输出流时 事件Error事件发生。流与输入/输出功能使用进程对象读取进程标准输出。

    • 如果使用 INPUTOUTPUT 关键字替换 READWRITE ,进程被执行在虚拟终端中。 这意味着进程认为自己运行在真正的终端中。

  • NameProcess使用的事件名。缺省是“=Process=”。

    In Gambas 3, there is no default event name anymore.

    In other words, you must add As "Process" to get the same behaviour as Gambas 2.

在Gambas3中,它不再是缺省的事件名。

换句话说,必须添加
AS "Process"
以得到像Gambas2一样的特性。

用赋值语句可以创建一个对内部Process的引用。

Quick syntax

如果使用第二种语法执行命令行,解释器等待其结束,并且完整的命令行输出会保存在指定的字符串中。

Examples

' 获取目录的内容

SHELL "ls -la /tmp" WAIT

' 在后台完成同样的工作

DIM Content AS String

SHELL "ls -la /tmp" FOR READ

' Get the contents of a directory in background


Dim Result AS String

Shell "ls -la /tmp" For Read As "Process"

...

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形成对照的是进程可以同步或者异步运行。

参见