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.

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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.