Quiero ejecutar algo en un shell de Linux en algunas condiciones diferentes y poder generar el tiempo de ejecución de cada ejecución.
Sé que podría escribir un script de Perl o Python que haría esto, pero ¿hay alguna manera de hacerlo en el shell? (que resulta ser bash)

Tickscomo el caso de Windows?Respuestas:
Use la
timepalabra clave incorporada :$ tiempo de ayuda tiempo: tiempo [-p] TUBERÍA Ejecute PIPELINE e imprima un resumen del tiempo real, el tiempo de CPU del usuario, y el tiempo de CPU del sistema dedicado a ejecutar PIPELINE cuando finaliza. El estado de retorno es el estado de retorno de PIPELINE. La opción '-p' imprime el resumen de tiempos en un formato ligeramente diferente. Esto usa El valor de la variable TIMEFORMAT como formato de salida.Ejemplo:
fuente
time -p i=x; while read line; do x=x; done < /path/to/file.txt? Inmediatamente devuelve 0.00 a menos que no ponga nada antes del ciclo while ... ¿qué da?timepuede cronometrar una tubería completa tal como está (en virtud de ser una palabra clave Bash ), debe usar un comando de grupo ({ ...; ...; }) paratime -p { i=x; while read line; do x=x; done < /path/to/file.txt; }type -a timePuede obtener información mucho más detallada que el bash incorporado
time(que Robert Gamble menciona) usando el tiempo (1) . Normalmente esto es/usr/bin/time.Nota del editor: para asegurarse de que está invocando la utilidad externa en
timelugar de latimepalabra clave de su shell , invoque como/usr/bin/time.timees una utilidad obligatoria de POSIX , pero la única opción que debe admitir es-p.Las plataformas específicas implementan extensiones específicas no estándar:
-vfunciona con la utilidad de GNUtime, como se demuestra a continuación (la pregunta está etiquetadalinux); la implementación de BSD / macOS utiliza-lpara producir resultados similares - verman 1 time.Ejemplo de salida detallada:
fuente
fuente
Para una medición delta línea por línea, pruebe gnomon .
También puede usar las opciones
--highy / o--mediumpara especificar un umbral de longitud en segundos, durante el cual gnomon resaltará la marca de tiempo en rojo o amarillo. Y también puedes hacer algunas otras cosas.fuente
Si desea más precisión, use
%Ncondate(y usebcpara el diff, porque$(())solo maneja enteros).Aquí se explica cómo hacerlo:
Ejemplo:
Resultado:
fuente
Si tiene la intención de usar los tiempos posteriores para calcular, aprenda a usar la
-fopción de/usr/bin/timegenerar código que ahorre tiempo. Aquí hay un código que utilicé recientemente para obtener y ordenar los tiempos de ejecución de toda una clase de programas de estudiantes:Luego concatenaba todos los
$timefilearchivos y canalizaba la salida en un intérprete de Lua . Puede hacer lo mismo con Python o bash o cualquiera que sea su sintaxis favorita. Amo esta técnicafuente
/usr/bin/timees necesaria porque aunquewhich timele dirá lo contrario, si simplemente ejecutatime, ejecutará la versión de su shell de latimecual no acepta ningún argumento.env time:-)Si solo necesita precisión para el segundo, puede usar la
$SECONDSvariable integrada , que cuenta el número de segundos que el shell ha estado ejecutándose.fuente
Puede usar
timey subshell():O en el mismo caparazón
{}:fuente
(&)(nuevo contexto, subshell ) y otro con{&}(mismo shell, mismo contexto)El camino es
la salida es >>
fuente
-lphtreadni-oetiquetas. Solo necesito usar eltimecomando, que la respuesta aceptada explica mejor.Un método posiblemente simple (que puede no satisfacer las necesidades de los diferentes usuarios) es el uso de shell PROMPT. Es una solución simple que puede ser útil en algunos casos. Puede usar la función de solicitud de bash como en el ejemplo a continuación:
El comando anterior dará como resultado el cambio del indicador de shell a:
Cada vez que ejecuta un comando (o presiona enter) que regresa al indicador del shell, el indicador mostrará la hora actual.
notas:
1) tenga en cuenta que si esperó algún tiempo antes de escribir su próximo comando, entonces esta vez debe tenerse en cuenta, es decir, la hora que se muestra en el indicador del shell es la marca de tiempo cuando se muestra el indicador del shell, no cuando ingresa el comando. algunos usuarios eligen presionar la tecla Intro para obtener un nuevo aviso con una nueva marca de tiempo antes de que estén listos para el siguiente comando.
2) Hay otras opciones y modificadores disponibles que se pueden usar para cambiar el indicador de bash, consulte (man bash) para obtener más detalles.
fuente