所謂的Shell,就是圍繞在OS核心外圍的使用者介面,你可以參考「當劇本遇上殼」這篇文章對Shell的說明。
本文章介紹一些常用的函數與用法,讓你可以將REBOL當作Shell,用來對OS做一些基本的檔案操作。
【目前的目錄】
如果你想知道目前的工作目錄為何,你可以利用what-dir函數,如下:
>> what-dir
== %/c/Documents%20and%20Settings/Jerry%20Tsai/桌面/
「==」表示前面的函數有傳出值,其值為「%/c/Documents%20and%20Settings/Jerry%20Tsai/桌面/」。
你也可以用pwd取代what-dir,效果完全一樣:
>> pwd
== %/c/Documents%20and%20Settings/Jerry%20Tsai/桌面/
REBOL的檔案表示方式,依照下面的規則:
- 開頭使用「%」
- 目錄的分隔符號使用「/」
- 中間如果有特殊字元,則使用「%」後面接著兩個十六進位數字,代表該特殊字元的編碼。以這裡的例子來說,空白的值,在ASCII編碼是十六進位的20。所以寫成%20
- 如果是目錄,則最後是「/」
- 如果是絕對路徑,則開頭的「%」後面會接著一個「/」。如果是相對路徑,則開頭的「%」後面不會出現一個「/」。
【檔案的轉換】
如果你對於上面描述的檔案規則覺得不習慣,可以利用to-local-file,將what-dir傳出的檔案轉成作業系統慣用的格式,作法如下:
>> to-local-file what-dir
== "C:\Documents 20and 20Settings\Jerry Tsai\桌面\"
因為to-local-file的傳出值是字串不是檔案,所以前後加上雙引號「"」。有一個函數和to-local-file做的事剛好事相反的,可以把作業系統檔案字串,轉成REBOL檔案,此函數名為to-rebol-file,範例如下:
>> to-rebol-file "C:\Program Files\"
== %/C/Program%20Files/
【改變目錄】
你可以使用change-dir(或cd)函數,改變目前的目錄,例如:
>> cd %/c/
>> pwd
== %/c/
你也可以利用相對路徑的表示方式(也就是開頭的「%」後面不寫「/」),例如:
>> pwd
== %/c/
>> cd %Program%20Files
>> pwd
== %/C/Program%20Files/
有兩個特殊的相對路徑表示方式:「%.」表示目前的目錄,「%..」表示往上一個目錄。依此類推,「%../../表示往上兩層目錄」。下面是一個範例:
>> pwd
== %/C/Program%20Files/
>> cd %..
>> pwd
== %/c/
【製造目錄】
你可以使用make-dir(或mkdir)函數,製作新的目錄,例如:
>> mkdir %abc/
這表示在目前的目錄下,建立一個abc目錄。再看一個例子:
>> mkdir/deep %/c/rebol/my-script/
這裡的mkdir後面緊接著出現「/deep」,意思是:在建立此目錄的過程中,如果有其他的目錄尚未建立,就一併建立。所以如果%/c/rebol/尚未存在,就會先建立%/c/rebol/,然後再建立%/c/rebol/my-script/。
像這種函數後面加上的修飾,我們稱為refinement。
【列出檔案】
你可以使用list-dir(或ls)函數,將某目錄下的檔案列出來,例如:
>> ls %/c/
如果後面沒有寫目錄,預定就是目前的目錄(%.),例如:
>> ls
list-dir(與ls)可以使用下面的refinement:
/l:表示每個檔案用一行顯示
/f:只列出檔案,不列出目錄
/d:只列出目錄,不列出檔案
/r:列出此目錄以及底下所有子孫目錄內的檔案
例如:
>> ls/l/r
當同時使用兩個以上的refinement時,順序無所謂,所以「ls/l/r」和「ls/r/l」是完全一樣的效果。
【取得檔案資訊】
你可以利用「modified?」取得檔案最後修改時間,用「size?」取得檔案大小,用「dir?」得知否為目錄(而非檔案)。例如:
>> modified? %/c/rebol/core.exe
== 5-Mar-2008/6:31
>> size? %/c/rebol/core.exe
== 219136
>> dir? %core.exe
== false
2 則留言:
询问一下,怎么用rebol来执行系统命令呢?类似perl语言中的system和exec。
REBOL 2.x有一個函數,名為call。
張貼留言