一般来说,REBOL不需要什么特别的设置(configuration),就可以执行。但是在某些环境下(特别是Unix),你可能需要设置REBOL_HOME环境变量。另外,在某些窗口环境中,可以将扩展名为“.r”的文件,设置为REBOL解释器的关联文件,以方便执行。
真正重要的是网络的设置与安全的设置,分成两小节来说明。
网络设置
某些REBOL函数需要知道网络相关的设置,否则无法运作。例如send函数可以用来发送电子邮件。如果使用send,就必须先设置好外寄电子邮件服务器(SMTP Server)。如果没设置电子邮件服务器,就试图送出email,会得到下面的结果:
>> send jerrytsai@shinewave.com.tw "Hello"
** User Error: No network server for smtp is specified
** Near: smtp-port: open [scheme: 'smtp]
either only
我们可以先设置网络,再执行send,就不会有问题了:
>> set-net [jerrytsai@shinewave.com.tw
smtp.shinewave.com.tw]
>> send jerrytsai@shinewave.com.tw "Hello"
connecting to: smtp.shinewave.com.tw
set-net是一个函数,后面需要一个区块(block)参数(所谓的区块,指的是:用中括号[ ]包围的一群值),区块内放置“至少”两个值,第一个值是寄件者的电子邮件信箱,第二个值是外寄电子邮件服务器(SMTP Server)。如果你不知道你的SMTP Server为何,可以从你的收信软件(例如:Microsoft Outlook)中找到这样的信息。
如果每次使用send前都要先利用set-net来设置网络,也实在是太麻烦了。你可以将这道set-net描述写在user.r中。前一节提到,REBOL解释器启动时,会自动读进user.r文件内的REBOL script,并执行之。
Set-net的参数区块内,最少要指定两个值,最多可以有六个值,这六个值的意义依序分别为:
1. 电子邮件帐号
2. 电子邮件发送服务器
3. 电子邮件接收服务器
4. proxy服务器
5. proxy port(默认值是1080)
6. proxy type(默认值是“socks”)
任何值如果不存在,可以利用none来表示。例如:
set-net [luke@rebol.com mail none our-proxy 1080 socks]
这六个值中,第四到第六的值是和proxy有关。如果你是直接利用调制解调器(modem)或以太网(ethernet)联机到互联网(Internet),你不需要设置这三个值。如果你不确定这三个值应该么设置,你可以从你的网页浏览器(Web browser)中找到这些设置。以微软的Internet Explorer浏览器来说,在菜单中选择【工具】à【Internet选项】à【连接】à【局域网设置】,即可找到Proxy的相关设置值。
对于REBOL来说,proxy类型可以是socks、socks5、socks4、generic。其中generic是generic CERN proxy的意思。
其实,set-net这个函数会将这六个设置值依序放到下面的六个系统变量中:
SYSTEM/USER/EMAIL
SYSTEM/SCHEMES/DEFAULT/HOST
SYSTEM/SCHEMES/POP/HOST
SYSTEM/SCHEMES/DEFAULT/PROXY/HOST
SYSTEM/SCHEMES/DEFAULT/PROXY/PORT-ID
SYSTEM/SCHEMES/DEFAULT/PROXY/TYPE
因此,我们也可以不使用set-net函数,而直接设置变量,例如:
>> SYSTEM/USER/EMAIL: jerrytsai@shinewave.com.tw
>> SYSTEM/SCHEMES/DEFAULT/HOST: smtp.shinewave.com.tw
请注意,利用这种方法来设置变量时,冒号“:”必须紧接在变量后面,而冒号后面必须要有空格。
你可以利用print来查看这些变量的值,例如:
>> print SYSTEM/SCHEMES/DEFAULT/HOST
msa.hinet.net
安全设置
REBOL script执行时必须通过REBOL解释器,而REBOL解释器可以进行安全把关,如果解释器发现script试图进行一些“有安全疑虑”的动作时,就会显示出类似图1的对话框(dialog),警告用户。用户可以选择因应的方式:
l Yes:允许script进行此次动作,继续执行
l Allow all:允许script进行所有此类动作(以后不用再问了),继续执行
l No:不允许script进行此动作,继续执行。这会产生Security Violation(违反安全)的Access Error(存取错误)。
l Quit:将此script终止执行
图1 REBOL解释器询问我们,如何处置有安全疑虑的动作
何谓“有安全疑虑”的动作?对于REBOL/Core、REBOL/View、REBOL/View/Pro、REBOL/Command、REBOL/Command/View这五个标准的REBOL解释器来说,如果没有特别设置安全,在解释器预定的情况下,如果script试图修改磁盘内容或试图执行磁盘内的文件,就会出现上述的对话框(dialog),来让用户自行决定。藉此保护用户的文件系统,免于受到破坏。
但是上述的安全设置,只有针对这五个标准的REBOL解释器。对于REBOL/Base、REBOL/Pro、与REBOL/Face来说,完全没有安全的限制。因为这三个精简核心版(kernel)的解释器是给软件开发人员用的,而不是给一般的软件用户用的。软件开发人员只会使用REBOL/Base、REBOL/Pro、与REBOL/Face来测试自己开发出来的REBOL script,而不会用它们来执行其它的REBOL script。
如果精简核心版的解释器想要和标准版的解释器一样,藉此保护用户的文件系统,免于受到破坏,可以利用下面的叙述:
secure [file [allow read ask write ask execute]]【注】
【注】secure后面中括号内的文字,就是一种很简单的方言,由security函数制订,专门用来描述对于网络和磁盘存取动作的限制。方言中出现的字,即使某些和REBOL语言的函数一样(例如此处的read、ask、write),但意义上完全是两回事。这就是方言!用来表达特殊领域,且不受到原本REBOL语法的规范。
这里的意思是:对于文件的安全控管方式,允许文件被读(allow read)、写入的时候需要询问用户(ask write)、执行文件的时候需要询问用户(ask execute)。
我们可以利用security函数来针对网络、整个文件系统、特定文件或目录,进行安全上的限制。为了方便起见,我们通常将安全设置的叙述,放在rebol.r中。
Security函数后面可以跟着一个字或一个区块。如果是一个字,则表示网络和文件系统都采用此种安全处理方式。如果是一个区块,可以做比较细微的更动。例如:
Security ask
上面表示,不管对于网络或磁盘系统的存取,都必须先询问用户,取得同意。
Security [ net quit file ask %./ allow ]
上面表示,对于网络的存取一概拒绝,且自动结束程序的执行。对于文件系统,必须先询问用户,取得同意。对于目前目录下(“%.”表示目前的目录)的所有文件,一律允许存取。
关于security函数的详细用法,你可以利用help函数(或?)来取得说明文件:
>> ? security
如果你想执行某个可信任的REBOL脚本,想破除安全限制,你可以利用REBOL解释器的命令行选项“-s”【注】,如下所示。除了“-s”,还有一个“+s”的选项,其作用刚好和“-s”相反。
REBOL -s TrustWorthy.r
【注】这年头,凡事还是小心一点好,建议你不要轻易使用“-s”。
发表日期: Feb. 29, 2004