2012-02-14 15 views

Odpowiedz

15

Zależy od tego, co naprawdę masz na myśli.

Jednym ze sposobów jest napisać trzeci („master”) skrypt, który zrobi

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

Innym sposobem jest po prostu dodać drugie połączenie do source z powyższego przykładu do końca pierwszego scenariusza.

Zmiana pierwszego podejścia: jeśli skrypty do wykonania znajdują się w tym samym katalogu co skrypt nadrzędnej, idiomatycznym sposób na source nich jest

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

Ten sposób pozyskiwania będą działać bez względu na katalog bieżącego procesu to i gdzie znajduje się katalog projektu.

3

Wystarczy użyć źródła, aby uruchomić drugi skrypt.

source "/tmp/whatever.tcl" 
1

Chociaż jest to generalnie poprawna odpowiedź, poniewaz ta kwestia nie została sformułowana precicely istnieje mnóstwo sposobów achive cel uruchomiony kod tcl tcl od wewnątrz. Nie będę się tym zajmował szczegółowo, ponieważ zrozumienie wykonania kodu jest jednym z głównych punktów zrozumienia tcl itselve.

Jest źródłem

Komenda źródło nie należy pomieszać z wykonywania skryptów w sposób klasyczny, co myślę rozrusznik Wątek zapytałem.

Polecenie źródłowe jest podobne do polecenia "include" w języku c/perl/php. Języki takie jak Java lub Python mają tylko mechanizmy "importowania".

Różnica polega na tym, że te języki tworzą wewnętrzną bazę danych dostępnych pakietów, które są połączone z odpowiednimi plikami źródłowymi/binarnymi/kodami bajtowymi. Pisząc instrukcję importu, ładowane są powiązane pliki źródłowe, bajtowe lub binarne. Pozwala to na bardziej szczegółowe zarządzanie zależnościami bez pisania dodatkowego kodu. W tcl można to osiągnąć za pomocą przestrzeni nazw, a pakiet wymaga polecenia. Przykład:

Przypuśćmy, że masz source.tcl:

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

Teraz masz "master" skrypt jak to nazwać. Nazywam to "głównym". Ma treść:

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" 

Polecenie exec

Jeśli można żyć z dodatkowego obciążania zaczynając zupełnie nowe wystąpienie interpretera Można też zrobić:

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

Komenda eval

Eval może ocenić ciąg lub listę (w tcl wszystko jest ciągiem znaków) tak, jakby był zaprogramowany kod. Musisz załadować kompletny plik źródłowy do ciągu znaków. Następnie użyj eval, aby ocenić kod w oddzielnym zakresie, aby nie nadpisywać danych w głównym pliku źródłowym.

set fp [open "somefile" r] 
set code_string [read $fp] 
close $fp 
eval $code_string 
Powiązane problemy