Cómo se manejan los argumentos citados por / bin / time

1

Estoy cronometrando un binario personalizado en la forma: ./prog --opt1=arg1 --opt2=arg2 --opt3="arg3"

Se requiere que la tercera opción tenga un argumento citado. En un script guardo todas las opciones:

exec=./prog
opts="--opt1=arg1 --opt2=arg2 --opt3=\"arg3\""

Cuando trato de cronometrar el programa, recibo un error con mi programa analizando los argumentos. Supongo que es porque está viendo el último argumento como no citado. La salida de /bin/time:

\bin\time -v $exec $opts

Error parsing args (de mi programa)
Command being timed: "./prog --opt1=arg1 --opt2=arg2 --opt3="arg3""

Sin embargo, cuando solo copio y pego, lo que dice que es el comando, se ejecuta bien:

./prog --opt1=arg1 --opt2=arg2 --opt3="arg3" - corre bien

¿Qué está /bin/timehaciendo y cómo puedo solucionarlo? Supongo que tiene que ver con las citas, como tal vez ejecuta eval o algo así. No estoy seguro de qué hacer al respecto.

Mike Lui
fuente

Respuestas:

0

Lo arreglé estableciendo todo el comando en una variable y luego evaluando eso:

$ full_cmd="/bin/time -v $exec $opts"
$ eval $full_cmd

Mike Lui
fuente
evales la manera incorrecta de hacer esto; Tiene una reputación bien merecida por causar errores inesperados (ya veces incomprensibles). Ver BashFAQ # 50: Estoy tratando de poner un comando en una variable, ¡pero los casos complejos siempre fallan! (y las muchas respuestas anteriores que lo vinculan) para obtener mejores ideas.
Gordon Davisson