2011-06-28 15 views
7

yılında kaynağı ile ilgili bir soru:Bir dosya adında test7.tcl var Tcl

namespace eval ::dai { 
    variable name "ratzip" 
    variable birthday "1982" 
    proc hello {} { 
     variable name 
     variable birthday 
     puts "Hello, I am $name birthday is $birthday" 
    } 
} 

ve bu şekilde bu başka bir dosya içine dosya denilen test8.tcl kaynak istiyorum:

source test7.tcl 

::dai::hello 

ama bana hata veriyor: "test7.tcl" dosyasını okuyamadı: böyle bir dosya veya dizin yok

ancak iki dosya aynı klasörün altında, ne oldu?

+0

Eminim test8.tcl'yi şu şekilde çalıştırmıyorsunuz: 'tclsh test8.tcl' veya' source test8.tcl'. Bunun yerine, farklı bir dizindesiniz, bu yüzden dosya adı beklediğiniz gibi değil. Tam dosya adının beklediğiniz gibi olup olmadığını görmek için 'test7.tcl' dosyasını normalleştirin. –

cevap

10

bu kullanımı:

source [file join [file dirname [info script]] "test7.tcl"] 

Not Bu dış komut dosyası içinde tanımlanan prosedürler içinde değil çalışır ki (test8.tcl Sizin durumunuzda) çünkü kaynak bittikten sonra genellikle çağrılırlar. Bu durum sizin için en uygun çözüm ise, dış komut dosyanızdaki bir değişkendeki info script çıktısını kaydetmektir (ya da en sonunda en iyi yaklaşım için sadece temassız yerine tüm dosyaları hemen kaynak).

2

test8.tcl yoluna göre kaynaklanacak dosyanın yolunu belirtmeniz gerekmez, ancak yürürlükteki çalışma dizinine göre. Örneğin. Mutlak yolu kullanın:

source /path/to/test7.tcl 
4

kullanın source [file join [file dirname [info script]] test7.tcl] - Eğer source yürütme dosyanın tam yolunu inşa onun tam dosya yolları hedef dosyasını kaynak olacak bu şekilde; Bu, geçerli dizininiz yürütme sırasında ne olursa olsun çalışacaktır. Şu anda yürütülen komut aynı dizinde bir dosyayı kaynak için

İlgili konular