2011-06-28 17 views
7

ソースについての質問:私はtest7.tclという名前のファイルが持っているのTcl

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

を、私は別のファイル、このようにtest8.tclと呼ばれるには、このファイルをソースにしたい:

source test7.tcl 

::dai::hello 

それは私にエラーが表示されます: "test7.tcl"ファイルを読み込めませんでした:そのようなファイルやディレクトリはありません

2つのファイルは同じフォルダの下にあります。

+0

私は 'tclsh test8.tcl'や' source test8.tcl'のようにtest8.tclを実行していないと思います。代わりに、あなたは別のディレクトリにいますので、ファイル名は期待した通りではありません。 'file normalize test7.tcl'で診断して、完全なファイル名が期待どおりかどうか確認してください。 –

答えて

10

、これを使用する:

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

注このが外側スクリプト内で定義された手順内部ない作業を行うこと(test8.tclあなたの場合は)ソースが終了した後に呼び出されるのが普通です。その場合、最も簡単な解決策は、外側のスクリプトの変数にinfo scriptの出力を保存することです(または最終的に最良のアプローチのためにすべてのファイルをただちに遅延させるのではなく)。

2

test8.tclのパスを基準にして、現在の作業ディレクトリのを基準にして、ソースとなるファイルのパスを指定する必要はありません。例えば。絶対パスを使用します。

source /path/to/test7.tcl 
4

使用source [file join [file dirname [info script]] test7.tcl] - あなたはsourceの実行ファイルのフルパス名から構築し、そのフルパス名を使用して、ターゲットファイルを調達することがありますそのように。これは実行中に現在のディレクトリが何であっても機能します。現在実行中のスクリプトと同じディレクトリにあるファイルをソースに

関連する問題