/ / Cómo pasar los switches para un script perl que se ejecuta desde tcl usando exec - perl, tcl, exec

Cómo pasar los switches para un script perl que se ejecuta desde tcl usando exec - perl, tcl, exec

Genero algunas variables en mi script tcl que en realidad se usan como interruptores para un script perl.

mis interruptores son -X, -Y y -Z, Los almaceno en una variable, cmd con set cmd "-X -Y -Z"

Utilizo exec para ejecutar el script perl en tcl como este:

exec ./script.pl $cmd

que arroja un error: "Error: Unknown option x -y -z"

Entonces probé de otra manera:

exec ./script.pl -- $cmd

Para este caso particular, el script perl se ejecuta pero sin los conmutadores, es decir, los conmutadores no se activan.

Hay alguna manera de resolver esto?

Respuestas

3 para la respuesta № 1
set cmd "-X -Y -Z"

Crea una sola cadena con -X -Y -Z en eso. Cuando llamas al exec comando con exec ./script.pl $cmd, estas pasando un solo argumento con -X -Y -Z. Lo que quieres son tres argumentos separados. La mejor manera de hacer esto es:

 exec ./script.pl {*}$cmd

los {*} operador expande una lista en sus palabras componentes.

Esto es muy útil. Puedes construir tu lista de argumentos con un código similar a (un ejemplo):

set cmd {}
lappend cmd -X
if { $mytest eq "true" } {
lappend cmd -Y
}
lappend cmd -Z
if { $filename ne {} } {
lappend cmd -f
lappend cmd $filename
}
exec ./script.pl {*}$cmd

Con versiones anteriores de Tcl, el eval comando debe ser utilizado:

eval exec ./script.pl $cmd

Edición: - argumento a exec

los -- argumento para exec especifica que no se analizarán más interruptores (opciones) por exec. Esto permite exec para ser utilizado en los casos en que un comando comienza con una -. p.ej.

 exec -- -myweirdcommand

Referencias Sintaxis de Tcl (# 5); evaluar; ejecutivo