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/time
haciendo 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.
eval
es 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.