unknown(3tcl) | Tcl Built-In Commands | unknown(3tcl) |
unknown - 處理對使用不存在命令的嘗試
unknown cmdName ?arg arg ...?
在一個腳本嘗試調用一個不存在的命令的時候,Tcl 解釋器將調用這個命令。unknown 的實現不是 Tcl 核心的一部分;但是在 Tcl 啓動的時候,它是一個被缺省定義的庫過程。你可以覆蓋這個缺省的 unknown 來改變它的功能。
如果 Tcl 解釋器遇到一個命令名而沒有爲它一個定義了的命令,則 Tcl 檢查是否存在一個叫 unknown 的命令。如果沒有這個命令,則解釋器返回一個錯誤。如果unknown 命令存在,則調用它並加上由被完全替換過的名字組成的參數和給最初的不存在的命令的參數。典型的,unknown 命令做在庫目錄中查找名字是 cmdName 的一個命令過程,把縮寫的命令名擴展成全長的名字,或自動的作爲子進程執行未知命令等事情。在這些情況下(比如擴展縮寫) unknown 將輕微的改變最初的命令,接着(重)執行它。unknown 命令的結果被用做最初的不存在的命令的結果。
unknown 的缺省實現的行爲如下。它首先調用 auto_load 庫過程來裝載命令,接着它用最初的參數執行最初的命令。如果自動裝載失敗則 unknown 調用 auto_execok 來看是否有一個叫 cmd 的可執行文件。如果有,它調用 Tcl exec 命令並加上 cmd 和所有 args 作爲參數。如果 cmd 不可自動執行,unknown 檢查是否在頂層調用這個命令並在任何腳本的外部。如果是這樣,則 unknown 進行兩個額外的步驟。首先它參看 cmd 是否是下列三種形式之一: !!, !event, 或 ^old^new?^?。如果是這樣,則 unknown 用與 csh 相同的方式對這些構造(construct)進行歷史替換。最後,unknown 檢查 cmd 是否是一個現存的 Tcl 命令的縮寫。如果是,它擴展命令名並用最初的參數執行這個命令。如果上述努力都不能執行這個命令,unknown 返回一個錯誤。如果定義了全局變量 auto_noload ,則跳過自動裝載步驟。如果定義了全局變量 auto_noexec,則跳過自動執行步驟。在通常的條件下,unknown 的返回值就是最終執行的命令的返回值。
info(n), proc(n)
error, non-existent command
寒蟬退士
2001/09/01
http://cmpp.linuxforum.net
本頁面中文版由中文
man 手冊頁計劃提供。
中文 man
手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
Tcl |