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 № 1set 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