¿Cómo obtener solo el uso máximo de memoria con /usr/bin/time?

¿Cómo obtener solo el uso máximo de memoria con /usr/bin/time?

Estoy creando un script con usr/bin/timeun programa para monitorear el uso de RAM de un script y almacenándolo en una variable para poder verificar si es superior a un límite especificado $mlimit, como este ejemplo usando ls /como comando:

$mlimit=512000 #512mb limit in kilobytes

$musage=$(/usr/bin/time -f "%M" ls / | rev | cut -f 1 | rev)
echo "RAM usage: $musage"

/usr/bin/timeen este caso, devuelve primero la salida del comando y luego el tamaño máximo del conjunto residente (uso de RAM). Entonces pensé que podría revertir la salida, cortarla para obtener el uso de RAM y revertirla. Pero obtengo este resultado: RAM usage: bin. bines el primer directorio devuelto por el ls /comando. Entonces mi estrategia para aprovechar el uso de RAM no funciona.

Gracias

Respuesta1

GNU timegenera la información de uso de recursos en stderr, aunque se le puede indicar que la escriba en otro lugar con-o

{
  musage=$(command time -o /dev/fd/4 -f %M ls / 4>&1 >&3 3>&-)
} 3>&1

Registraría el uso máximo de memoria en la variable dejando ls'stdout y stderr solos.

Eso funciona duplicando el fd 1 (stdout) original en fd 3 fuera de la sustitución del comando con 3>&1, de modo que dentro de la sustitución del comando, podamos restaurar la salida estándar original lscon >&3después de haber hecho que la canalización de sustitución de comandos esté disponible en fd 4.

Luego timeescribe su salida en esa tubería a través de /dev/fd/4, mientras que lsstdout es la original.

información relacionada