2012-02-14 25 views

Respuesta

15

Depende de lo que realmente quiere decir.

Una forma es escribir un tercer guión ("maestro"), que haría

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

Otra forma es simplemente añadir la segunda llamada a source del ejemplo anterior a la parte inferior de la primera secuencia de comandos.

Enmienda de la primera aproximación: si las secuencias de comandos para ser ejecutados se encuentran en el mismo directorio que el script superior, una forma idiomática a source ellos es

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

De esta manera abastecimiento funcionará sin importar el el directorio del proceso actual es y donde está ubicado el directorio del proyecto.

3

Solo tiene que utilizar el código fuente para ejecutar el segundo script.

source "/tmp/whatever.tcl" 
1

Si bien esto es generalmente una respuesta correcta, lástima pues la pregunta no fue formulada precicely hay un montón de maneras para hacer el objetivo de ejecutar código TCL TCL desde dentro. Quiero entrar en esto en detalle, porque la comprensión de la ejecución de código es un punto importante en la comprensión de tcl itselve.

Hay fuente

El comando de origen no debe confundir con la ejecución de secuencias de comandos de una manera clásica, lo que creo que el hilo de arranque ha pedido.

El comando de origen es como el comando "incluir" en c/perl/php. Los lenguajes como java o python solo tienen mecanismos de "importación".

La diferencia es que esos idiomas crean una base de datos interna de paquetes disponibles, que están vinculados a los correspondientes archivos de código fuente/binario/bytecode. Al escribir una declaración de importación, se cargan los códigos fuente o de bytes vinculados o binarios. Esto permite una administración de dependencias más profunda sin escribir código adicional. En tcl esto se puede lograr con espacios de nombres y el paquete requiere comando. Ejemplo:

Suponga que tiene esta source.tcl:

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

Ahora, usted tiene la secuencia de comandos "maestro" como se llame. Yo lo llamo "principal". Tiene el contenido:

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" 

El comando exec

Si se puede vivir con una sobrecarga adicional de iniciar una nueva instancia toda intérprete que también podría hacer:

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

El comando eval

Eval puede evaluar una cadena o una lista (en tcl todo es una cadena) como si fuera un código programado. Tendría que cargar el archivo fuente completo en una cadena. Y luego use eval, para evaluar el código dentro de un alcance separado, para no sobrescribir cosas en su archivo fuente principal.

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