GNU/Linux >> Tutoriales Linux >  >> Linux

¿Redirigir la salida de un comando en `comando de tiempo`?

Estoy tratando de cronometrar algo usando:

/usr/bin/time myCommand

Sin embargo, desde /usr/bin/time escribe en stderr, si myCommand también escribe en stderr, obtendré más que solo la salida de tiempo en la transmisión. Lo que quiero hacer es redirigir toda la salida de myCommand a /dev/null , pero aún escribe la salida del tiempo en stderr. Usando un ejemplo myCommand que escribe en stderr de ls /nofile , vemos que (obviamente) no hay ningún resultado con lo siguiente:

$ /usr/bin/time ls /nofile 2> /dev/null
$

Sin ninguna redirección, vemos tanto la salida de ls (a stderr) y la salida de time (también a stderr):

$ /usr/bin/time ls /nofile
ls: cannot access /nofile: No such file or directory
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps

Lo que quiero es algo que simplemente produzca:

$ /usr/bin/time ls /nofile > RedirectThatImAskingFor
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 3776maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps

¿Alguna idea?

Respuesta aceptada:

En ksh, bash y zsh, time es una palabra clave, no una función incorporada. Las redirecciones en la misma línea se aplican solo al comando que se cronometra, no a la salida de time mismo.

$ time ls -d / /nofile >/dev/null 2>/dev/null

real    0m0.003s
user    0m0.000s
sys     0m0.000s

Para redirigir la salida desde time en estos caparazones, debe usar un nivel adicional de agrupación.

{ time mycommand 2>&3; } 3>&2 2>mycommand.time

Si usa la versión GNU del time independiente utilidad, tiene un -o opción para escribir la salida de time en otro lugar que no sea stderr. Puedes hacer time escribe en la terminal:

/usr/bin/time -o /dev/tty mycommand >/dev/null 2>/dev/null

Si desea mantener la salida de time en su error estándar, necesita un nivel adicional de barajado del descriptor de archivo.

/usr/bin/time -o /dev/fd/3 mycommand 3>&2 >/dev/null 2>/dev/null

Con cualquier time utilidad, puede invocar un shell intermedio para realizar las redirecciones deseadas. Invocar un shell intermedio para realizar acciones adicionales como cd , redirecciones, etc. es bastante común:es el tipo de pequeñas cosas para las que están diseñadas las conchas.

/usr/bin/time sh -c 'exec mycommand >/dev/null 2>/dev/null'

Linux
  1. CentOS/RHEL:cómo obtener la fecha y la hora del comando ejecutado en la salida del comando del historial

  2. ¿Cómo redirigir la salida de system() a un archivo?

  3. ¿Cómo redirigir la salida del comando de tiempo a un archivo en Linux?

  4. Redirección de salida de comando a archivo y terminal

  5. ¿Cómo redirigir la salida de un comando a un archivo cuando el comando solicitará las entradas del usuario?

Comando de tiempo de Linux

Cómo redirigir la salida del comando de shell

Seguimiento del tiempo con Timewarrior en la línea de comandos

¿Buscar texto en la salida del terminal?

Entendiendo el comando time en Linux

¿Ocultar la salida de un comando de shell solo en caso de éxito?