auto_execok, auto_import, auto_load, auto_mkindex,
auto_mkindex_old, auto_qualify, auto_reset, tcl_findLibrary, parray,
tcl_endOfWord, tcl_startOfNextWord, tcl_startOfPreviousWord,
tcl_wordBreakAfter, tcl_wordBreakBefore - standard library of Tcl
procedures
總覽 SYNOPSIS
auto_execok cmd
auto_import pattern
auto_load cmd
auto_mkindex dir pattern pattern ...
auto_mkindex_old dir pattern pattern ...
auto_qualify command namespace
auto_reset
tcl_findLibrary basename version patch initScript enVarName varName
parray arrayName
tcl_endOfWord str start
tcl_startOfNextWord str start
tcl_startOfPreviousWord str start
tcl_wordBreakAfter str start
tcl_wordBreakBefore str start
介紹 INTRODUCTION
Tcl
為公共需求的功能包含了一個
Tcl 過程庫。在 Tcl
庫中定義的過程是適用於多種不同的應用的通用過程。用
info library 命令返回 Tcl
庫的位置。除了這個 Tcl
庫之外,每個應用通常都有它自己的支援過程庫;這個庫的位置通常用
$app_library
全域性變數的值給出,這裡
app
是應用的名字。例如,Tk
庫的位置保持在變數
$tk_library 中。
要訪問在 Tcl
庫中的過程,一個應用應該
source (載入)庫中的檔案
init.tcl,例如,Tcl 命令
source [file join [info library] init.tcl]
如果在一個應用的 Tcl_AppInit
過程中呼叫了庫過程
Tcl_Init,則這(個載入)將自動發生。在
init.tcl
中的程式碼將定義
unknown
過程和使用下面定義的自動裝載機制安排其他過程在需要時裝載。
命令過程 COMMAND PROCEDURES
在 Tcl
庫中提供了下列過程:
- auto_execok
cmd
- 確定是否有一個叫 cmd
的一個可執行檔案或
shell
內建命令。如果有,它返回要傳遞給
exec 來執行這個叫 cmd
的可執行檔案或 shell
內建命令的那些引數的一個列表。如果沒有,它返回一個空串。這個命令檢查在當前查詢路徑中目錄(由
PATH
環境變數給出),在其中查詢叫
cmd
的一個可執行檔案。在
Windows
平臺上,查詢被展開為相同的目錄和與
exec
使用相同的檔名擴充套件。
Auto_exec 在一個叫 auto_execs
的陣列中記住以前查詢的資訊;這避免在將來呼叫相同的
cmd
時進行路徑查詢。可以使用命令
auto_reset 來強迫 auto_execok
忘掉快取的資訊。
- auto_import
pattern
- 在 namespace import 期間呼叫
Auto_import 來檢視用 pattern
指定的匯入命令是否駐留在一個
自動裝載的庫中。如果是,則裝載這個命令,這樣要建立匯入連線的直譯器就可以獲得它們。如果這個命令不駐留在自動裝載庫中,auto_import
什麼都不做。
- auto_load
cmd
- 這個命令嘗試裝載一個叫做
cmd 的 Tcl
命令的定義,它查詢一個自動裝載路徑,它是一個或多個目錄的一個列表。如果全域性變數
$auto_path
存在的話,則它給出這個自動裝載路徑。如果沒有
$auto_path 變數,則若 TCLLIBPATH
環境變數存在則使用它。否則自動裝載路徑只包含
Tcl
庫目錄。在自動裝載路徑中的每個目錄中必須有描述在這個目錄中定義的一個或多個命令的一個檔案
tclIndex,和要被求值來裝載每個命令的一個指令碼。應當使用
auto_mkindex
命令來自動生成 tclIndex
檔案。如果在一個索引檔案中找到
cmd
,則求值適當的指令碼來建立這個命令。如果成功的建立了
cmd,則 auto_load
命令返回
1。如果沒有給 cmd
的索引條目或這個指令碼實際上定義的不是
cmd(例如,因為索引資訊過時了),這個命令返回
0。如果在處理這個指令碼的時候發生了一個錯誤,則返回這個錯誤。Auto_load
只讀這個索引檔案一次並把它儲存到陣列
auto_index 中;以後對
auto_load
的呼叫將在這個陣列中檢查
cmd
而不是重讀索引檔案。可以用命令
auto_reset
刪除快取的索引資訊。這將強制下一個
auto_load
命令從磁碟重新裝載索引資料庫。
- auto_mkindex
dir pattern pattern ...
- 生成適合於 auto_load
使用的一個索引。這個命令在
dir
中查詢名字匹配任何
pattern
引數的所有檔案(使用
glob
命令進行匹配),生成在所有匹配的檔案的中定義的所有
Tcl
命令過程的一個索引,並且在
dir 中的一個叫 tclIndex
的檔案中儲存索引資訊。如果未給出模式,則假定模式是
*.tcl,例如
將在子目錄讀 foo
中讀取所有 .tcl
檔案並生成一個新索引檔案
foo/tclIndex。
Auto_mkindex 透過把 Tcl
指令碼載入(source)到一個從直譯器中來分析它們並監視執行的
proc 和 namespace
命令。擴充套件可以使用(沒有文件)
auto_mkindex_parser 包來註冊對 auto_load
索引有所貢獻的其他命令。你必須閱讀
auto.tcl
來檢視這是如何工作的。
Auto_mkindex_old
在一個相對不復雜的方式分析
Tcl 指令碼:
如果任何一行包含字
proc
為它的第一個字,則假定它為一個過程定義並接受這一行的下一個字為這個過程的名字。不是以這種方式出現的過程定義(比如,在
proc
前面有空格)將不被編排索引。如果你的指令碼包含“危險”程式碼,比如全域性初始化程式碼或有特殊字元如
$、*、[ 或 ]
的過程名字,則你使用
auto_mkindex_old 是更安全的。
- auto_reset
- 銷燬被 auto_execok 和 auto_load
快取的所有資訊。下次需要這些資訊的時候將從磁碟重新讀取。Auto_reset
還刪除在 auto-load
中列出的所有過程,這樣下次使用它們的時候將裝載它們的重新整理了的複本。
- auto_qualify
command namespace
- 計算 command
的完全限定的名字的一個列表。這個列表映象標準
Tcl
直譯器用以查詢命令的那個路徑:
首先它在當前名字空間中查詢這個命令,接著在全域性名字空間中。相應的,如果
command 是相對的並且
namespace 不是
::,則返回的這個列表兩個元素:
一個是由 namespace
界定範圍的command,如同它是一個在
namespace
名字空間中的命令一樣;而另一個
command
如同在全域性名字空間中的一個命令一樣。否則,如果
command 是絕對的(它以 ::
為開始),或者 namespace
是
::,則這個列表只包含一個
command
,如同它是一個在全域性名字空間中的命令一樣。
在 Tcl
中自動裝載設施使用
Auto_qualify,用來生成自動裝載索引如
pkgIndex.tcl,和用來在執行時進行實際的函式自動裝載。
- tcl_findLibrary
basename version patch initScript enVarName varName
- 這個命令是擴充套件在它們的初始化期間使用的一個標準查詢過程。擴充套件呼叫這個過程來在多個標準路徑中查詢它們的過程。目錄名字的最後的構成部分通常是
basenameversion
(例如,tk8.0),但在建造等級上他可能是“庫”。一旦找到就把
initScript 檔案
source(載入)到直譯器中。把在其中找到檔案的那個目錄儲存到全域性變數
varName
中。如果已經定義這個變數(比如,在應用初始化期間用
C
程式碼),則不進行查詢。否則在以下這些目錄中進行查詢:
由環境變數 enVarName
給出名字的目錄;相對於
Tcl 庫的目錄;相對於(???
relative to)在標準安裝 bin 或
bin/arch
中的可執行檔案的目錄;相對於在當前建造樹中的可執行檔案的目錄;相對於在並行建造樹中的可執行檔案的目錄。
- parray
arrayName
- 把陣列 arrayName
中的所有元素的名字和值輸出到標準輸出上。ArrayName
必須是一個對於 parray
的呼叫者是可以訪問的一個數組。它可以是區域性的或全域性的。
- tcl_endOfWord
str start
- 返回字串 str
中在起始索引 start
之後出現的第一個字結束(end-of-word)位置的的索引。定義字結束位置為在起始點之後跟隨在第一個單字字元後面的第一個非字字元。如果在起始點之後沒有字結束位置則返回
-1。關於 Tcl
如何確定哪個字元是單字字元的詳情參見下面對
tcl_wordchars 和 tcl_nonwordchars
的描述。
- tcl_startOfNextWord
str start
- 返回字串 str
中在起始索引 start
之後出現的第一個字開始(start-of-word)位置的的索引。定義字開始位置為跟隨在一個非字字元後面的第一個單字字元。如果在起始點之後沒有字開始位置則返回
-1。
- tcl_startOfPreviousWord
str start
- 返回字串 str
中在起始索引 start
之前出現的第一個字開始(start-of-word)位置的的索引。如果在起始點之前沒有字開始位置則返回
-1。
- tcl_wordBreakAfter
str start
- 返回字串 str
中在起始索引 start
之後出現的第一個字邊界的索引。如果在給定字串中在起始點之後沒有邊界則返回
-1。返回的索引參照組成一個邊界(字元)對的第二個字元。
- tcl_wordBreakBefore
str start
- 返回字串 str
中在起始索引 start
之前出現的第一個字邊界的索引。如果在給定字串中在起始點之前沒有邊界則返回
-1。返回的索引參照組成一個邊界(字元)對的第二個字元。
變數 VARIABLES
在 Tcl
庫中的過程定義或使用下列全域性變數:
- auto_execs
- 用它來記錄關於特定命令是否存在為可執行檔案的資訊。
- auto_index
- auto_load
用它來儲存從磁碟讀來的索引資訊。
- auto_noexec
- 如果設定了任何值,則
unknown
不嘗試自動執行任何命令。
- auto_noload
- 如果設定了任何值,則
unknown
不嘗試自動裝載任何命令。
- auto_path
- 如果設定了它,則它必須包含一個有效的
Tcl
列表,給出在自動裝載操作中要查詢的目錄。在啟動期間初始化這個變數為依次包含:
在 TCLLIBPATH
環境變數中列出的目錄,由
$tcl_library
變數命名的目錄,$tcl_library
的父目錄,在 $tcl_pkgPath
變數中列出的目錄。
- env(TCL_LIBRARY)
- 如果設定了它,則它指定包含庫指令碼的目錄的位置(這個變數的值將被賦予
tcl_library 變數並被 info library
命令所返回)。如果這個變數未被設定,則使用預設的值。
- env(TCLLIBPATH)
- 如果設定了它,則它必須包含一個有效的
Tcl
列表,給出在自動裝載操作期間要查詢的目錄。必須用
Tcl
格式指定目錄,使用“/”作為分隔符而不管是在什麼平臺上。只在初始化
auto_path
的時候使用這個變數。
- tcl_nonwordchars
- 這個變數包含一個正則表示式,用於象
tcl_endOfWord
這樣的例程來識別一個字元是否是一個字的一部分。如果這個模式匹配一個字元,則把這個字元作為一個非字(non-word)字元對待。在
Windows
平臺上,空格、tab、和換行被作為非字字元對待。在
Unix
下,除了數字、字母和下劃線之外,所有字元都是非字字元。
- tcl_wordchars
- 這個變數包含一個正則表示式,用於象
tcl_endOfWord
這樣的例程來識別一個字元是否是一個字的一部分。如果這個模式匹配一個字元,則把這個字元作為一個單字字元對待。在
Windows
平臺上,字有任何不是空格、tab、或換行的字元組成。在
Unix
下,字由數字、字母或下劃線組成。
- unknown_pending
- unknown
用它來記錄正在查詢的命令。在
unknown
在自身上無窮遞迴的地方,使用它來檢測錯誤。在
unknown
返回前刪除它的值。
參見 SEE ALSO
info(n), re_syntax(n)
關鍵字 KEYWORDS
auto-exec, auto-load, library, unknown, word, whitespace
《中國 Linux 論壇 man
手冊頁翻譯計劃》:
http://cmpp.linuxforum.net
跋
本頁面中文版由中文
man 手冊頁計劃提供。
中文 man
手冊頁計劃:https://github.com/man-pages-zh/manpages-zh