2012-02-14 2 views

ответ

15

В зависимости от того, что вы на самом деле имеете в виду.

Один из способов заключается в написании третий (​​«мастер») скрипт, который будет делать

source /the/path/to/the/first.tcl 
source /the/path/to/the/second.tcl 

Другим способом является просто добавить второй вызов source из приведенного выше примера в нижней части первого сценария.

Поправка к первому подходу: если сценарии должны выполняться расположены в том же каталоге, что и мастер-скрипт, идиоматический путь к source им является

set where [file dirname [info script]] 
source [file join $where first.tcl] 
source [file join $where second.tcl] 

Таким образом Sourcing будет работать независимо от того, что в каталог текущего процесса и где находится каталог проекта.

3

Вам просто нужно использовать источник для запуска второго скрипта.

source "/tmp/whatever.tcl" 
1

Хотя это, как правило, правильный ответ, becouse вопрос не precicely сформулировали есть куча способов для того чтобы достигнуть цели выполнения кода TCL внутри Tcl. Я не буду подробно разбираться в этом, потому что понимание выполнения кода является одним из основных моментов в понимании его двенадцати.

Существует источник

Команда источника не следует путать с выполнением скриптов классическим способом, что я думаю, что нить стартер спросил.

Исходная команда подобна команде «включить» в c/perl/php. Языки, такие как java или python, с другой стороны, имеют только механизмы импорта.

Отличие состоит в том, что эти языки создают внутреннюю базу данных доступных пакетов, которые связаны с соответствующими файлами source/binary/bytecode. Записывая оператор импорта, загружаются связанные источник, байт-код или двоичные файлы. Это позволяет использовать более глубокое управление зависимостями без написания дополнительного кода. В tcl это может быть достигнуто с помощью пространств имен, а пакет требует команды. Пример:

Предположим, у вас есть эта source.tcl:

proc foo {bar} {puts "baz"} 
set BAM "BOO" 

Теперь у вас есть свой "мастер" сценарий, как вы это называете. Я называю это «основным». Он имеет содержание:

set BAM {my important data} 
source source.tcl 
#also the function foo can now be used, becouse source reads the whole script 
foo {wuz} 
set BAM 
#will output "BOO" 

ехес команда

Если вы можете жить с дополнительными накладными расходами запуска целого нового экземпляра интерпретатора Вы также можете сделать:

set BAM {my important data} 
exec tclsh source.tcl 
#The variable BAM will not be modified. You can not use the function foo. 

Eval команда

Eval может оценивать строку или список (в tcl все строка), как если бы это был запрограммированный код. Вам нужно будет загрузить полный исходный файл в строку. И затем используйте eval, чтобы оценить код в отдельной области, чтобы не перезаписывать материал в основном исходном файле.

set fp [open "somefile" r] 
set code_string [read $fp] 
close $fp 
eval $code_string