2012-02-14 12 views

risposta

15

Dipende da cosa intendi davvero.

Un modo è quello di scrivere un terzo script ("master"), che avrebbe fatto

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

Un altro modo è quello di aggiungere solo la seconda chiamata al source dall'esempio precedente per la parte inferiore del primo script.

Modifica il primo approccio: se gli script da eseguire si trovano nella stessa directory dello script maestro, un modo idiomatico per source loro è

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

questo modo di sourcing funzionerà non importa quale sia il la directory del processo corrente è e dove si trova la directory del progetto.

3

Hai solo bisogno di utilizzare il codice sorgente per eseguire il secondo script.

source "/tmp/whatever.tcl" 
1

Mentre questo è generalmente una risposta corretta, siccome la questione non è stata formulata precicely ci sono tonnellate di modi per raggiungere l'obiettivo di esecuzione di codice tcl tcl dall'interno. Non voglio approfondire questo argomento, perché capire l'esecuzione del codice è uno dei punti principali della comprensione di questo.

C'è fonte

Il comando di origine non deve essere confondere con l'esecuzione di script in modo classico, quello che penso lo starter thread è chiesto.

Il comando di origine è come il comando "include" in c/perl/php. I linguaggi come java o python d'altra parte hanno solo meccanismi di "importazione".

La differenza è che queste lingue creano un database interno di pacchetti disponibili, che sono collegati ai corrispondenti file source/binary/bytecode. Scrivendo un'istruzione import, vengono caricati i sorgenti sorgente, i file btecode oi file binari. Ciò consente una gestione delle dipendenze più approfondita senza scrivere codice aggiuntivo. In questo modo è possibile aprirlo con namespace e il pacchetto richiede un comando. Esempio:

Supponiamo di avere questo source.tcl:

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

Ora, avete i vostri script "maestro" come lo chiami tu. Lo chiamo "principale". Ha il contenuto:

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" 

Il comando exec

Se si può vivere con un ulteriore sovraccarico di iniziare una nuova istanza dell'interprete si potrebbe anche fare:

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

Il comando eval

Eval può valutare una stringa o una lista (in tcl è una stringa) come se fosse codice programmato. Dovresti caricare il file sorgente completo su una stringa. E poi usa eval, per valutare il codice all'interno di un ambito separato, per non sovrascrivere le cose nel tuo file sorgente principale.

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