????
????? 一般來說,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