Tengo un script que llama al módulo Perl's Time :: HiRes para calcular el tiempo transcurrido. Básicamente la secuencia de comandos obtiene la hora de pasar por el siguiente de una sola línea:¿Cómo puedo ejecutar el código de Perl almacenado dentro de una variable de script de shell?
use Time::HiRes qw(time); print time
al intérprete Perl a través de las garrapatas de la espalda y vuelve los resultados.
#/bin/sh
START_TIME=`perl -e 'use Time::HiRes qw(time); print time'`
END_TIME=`perl -e 'use Time::HiRes qw(time); print time'`
ELAPSED_TIME=$(echo "($END_TIME - $START_TIME)" | bc)
echo $ELAPSED_TIME
Traté de volver a escribir de una manera más modular, pero estoy perplejo por las normas de cotización de la cáscara del golpe.
#/bin/sh
CALCULATE='bc'
NOW="perl -e 'use Time::HiRes qw(time); print time'"
START_TIME=`$NOW`
[Some long running task ...]
ELAPSED_TIME=$(echo "($NOW - $START_TIME)" | $CALCULATE)
echo $ELAPSED_TIME
Bash se queja de que algo no se cita correctamente. ¿Por qué no bash simplemente expande el comando en $ NOW y lo pasa al último tic para ser ejecutado?
Intenté varias formas de incrustar código perl en una variable de script de shell pero parece que no puede obtenerlo derecha.
¿Alguien sabe cómo cotizar código perl dentro de un script de shell correctamente?
@Mat Para que sea más fácil para las personas responder, acabo de mostrar un extracto de un script mucho más grande. Corté y pegué mal. Gracias por señalar. Fijo. Pero el problema sigue siendo la cita, sin embargo. – GeneQ
FYI, puedes escribir tu perl one-liner como 'perl -MTime :: HiRes = time -e 'print time'' –