2011-03-04 95 views
3

我在TCL編程新手獲得在TCL的PROC這是從另一個腳本

我有一個Tcl腳本調用test1.tcl和test2.tcl分別在兩個不同的

目錄調用的路徑F:\ TCLPrograms \ SamplePrograms \ test1.tcl和F:\ TCLPrograms \ test2.tcl

我想知道的test2.tcl這是一個進程

如果我給信息[腳本]的完整路徑內proc disp {}它返回它被調用的路徑

即F:\ TCLPrograms \ SamplePrograms \ test1.tcl

好心有人告訴我獲得PROC

test1.tcl的路徑:

puts "Processing test1..." 
source "F:\\TCLPrograms\\test2.tcl" 
set rc [disp] 
puts "Executed...." 

test2.tcl:

proc disp { } { 
puts "Successfully executed test2.tcl" 
set path [info script] 
puts "Script is invoked from the path: $path" 
} 

在此先感謝

回答

6

info script的結果取決於當前最裏面source,並且過程不保留該信息。 (好吧,它的調試信息保存在8.6和ActiveState的8.5版本中,但訪問起來確實很尷尬。)

最簡單的方法是使用變量來保存文件的名稱,如下所示:

variable dispScriptFile [file normalize [info script]] 
proc disp {} { 
    variable dispScriptFile 
    puts "Successfully executed test2.tcl" 
    set path [file dirname $dispScriptFile] 
    puts "Script is invoked from the path: $path" 
} 

注意,我們使用標準化的文件名,這樣,即使你使用相對路徑仍然有效,然後cd一些其他目錄。 (我還建議把的test2.tcl全部內容自己的命名空間內,它可以更容易讓事情分開。)

+0

感謝您的寶貴意見 – Vivek 2011-03-04 12:45:05

+0

但問題是我在同一個test2的兩個PROC {} .tcl我將從兩個不同的位置調用兩個不同的tcl腳本,每當我調用proc {}時,我需要知道路徑,你可以爲它建議嗎? – Vivek 2011-03-04 12:47:54

+0

您可以在該文件中定義的所有過程之間共享一個變量(根據需要更改名稱)。無論是或者我完全誤解你的問題。 – 2011-03-05 01:40:00

相關問題