вопрос об источнике в Tcl - PullRequest
8 голосов
/ 28 июня 2011

У меня есть файл с именем test7.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": такого файла или каталога нет

но два файла находятся в одной папке, что случилось?

Ответы [ 3 ]

11 голосов
/ 28 июня 2011

Чтобы получить файл, который находится в той же директории, что и текущий выполняемый скрипт, используйте это:

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

Обратите внимание, что не работает внутри процедур, определенных во внешнем скрипте (test8.tcl в вашем случае), потому что они обычно вызываются после завершения работы источника. Если это так, то самое простое решение - просто сохранить выходные данные info script в переменной во внешнем скрипте (или просто получить исходные файлы сразу, а не лениво для наилучшего подхода).

4 голосов
/ 28 июня 2011

Использовать source [file join [file dirname [info script]] test7.tcl] - таким образом вы будете получать целевой файл по его полному пути, составленному из полного пути к файлу, выполняющему source; это будет работать независимо от того, какой у вас текущий каталог во время выполнения.

2 голосов
/ 28 июня 2011

Вам не нужно указывать путь к источнику файла относительно пути test8.tcl, но относительно текущего рабочего каталога .Например, используйте абсолютный путь:

source /path/to/test7.tcl
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...