Foros del Web » Administración de Sistemas » Unix / Linux »

Aislar valor de comando "time" en bash script

Estas en el tema de Aislar valor de comando "time" en bash script en el foro de Unix / Linux en Foros del Web. Gente, tengo un problemilla.. Estoy realizando un script que hace descargas usando wget.. el tema es que quiero hacer algo asi... Copiando $ARCHIVO... Copia finalizada ...
  #1 (permalink)  
Antiguo 11/09/2006, 19:34
Avatar de Sh4ka  
Fecha de Ingreso: marzo-2005
Mensajes: 205
Antigüedad: 19 años, 1 mes
Puntos: 0
Aislar valor de comando "time" en bash script

Gente, tengo un problemilla..

Estoy realizando un script que hace descargas usando wget.. el tema es que quiero hacer algo asi...

Copiando $ARCHIVO...
Copia finalizada en TIEMPO_TOTAL_DE_DESCARGA

Y veo que con el comando "time" lo puedo obtener, pero no se como hacer para filtrar la palabra "real" con su tiempo.. Ya probe asi:

Código:
time wget blablabla.zip | grep "real" | awk 'print {$2}'
...pero así no anda... y necesito aislar el valor de "real"... espero me hayan entendido..

Código:
mellow@machine:~$ time wget http://server.blablabla.com/archivo.zip
--21:58:27--  http://server.blablabla.com/archivo.zip
           => `archivo.zip'
Resolviendo server.blablabla.com... falló: Nombre ó servicio desconocido.

real    0m2.110s
user    0m0.004s
sys     0m0.008s
mellow@machine:~$ w
Gracias.
  #2 (permalink)  
Antiguo 12/09/2006, 16:15
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Pues sinceramente estoy perdido, ¿será que no funciona en Bash (la página del manual habla demasiado de tcsh)? se supone que podés usar la opción de línea de comandos "-f", pero....

alvaro@AlvLin:~$ time -f
bash: -f: command not found

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

'toy perdido
  #3 (permalink)  
Antiguo 13/09/2006, 17:45
Avatar de Koveart
Colaborador
 
Fecha de Ingreso: julio-2002
Ubicación: Colombia
Mensajes: 4.407
Antigüedad: 21 años, 9 meses
Puntos: 29
Que buena pregunta la verdad este es un reto que espero podamos resolver porque de esta menra podemos usar el tiempo para cualquier ejecución de cualquier comando que realicemos....Seguiré investigando :)

Saludos
__________________
“Los soñadores no existen, se lo dice un soñador que ha tenido el privilegio de ver realidades que ni siquiera fue capaz de soñar”
  #4 (permalink)  
Antiguo 13/09/2006, 18:59
Avatar de Sh4ka  
Fecha de Ingreso: marzo-2005
Mensajes: 205
Antigüedad: 19 años, 1 mes
Puntos: 0
yeapp.. no funciona la opción en bash.. :(
y me alegro que sea un reto.. porque lo necesito realmente.. yo también sigo investigando por mi parte, si alguien logra resolverlo, por favor peguen el resultado.

gracias!
  #5 (permalink)  
Antiguo 14/09/2006, 07:08
Avatar de -Defero-
Colaborador
 
Fecha de Ingreso: julio-2004
Ubicación: Guipúzcoa
Mensajes: 4.776
Antigüedad: 19 años, 9 meses
Puntos: 76
Yo ayer estuve un rato probando, y no pude. A ver si esta tarde tengo tiempo de volver a probar...
__________________
abogado en Errenteria + procuradora en San Sebastián = equipo imparable
  #6 (permalink)  
Antiguo 14/09/2006, 09:31
Avatar de AleSanchez
Colaborador
 
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires, Argentina
Mensajes: 3.692
Antigüedad: 19 años, 7 meses
Puntos: 47
Mi comando time, me devuelve una cadena distinta a la que muestran en el post:
Código:
0.04user 0.02system 0:00.56elapsed 11%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+278minor)pagefaults 0swaps
Mi version de time:
Código:
[pupi@pupi ~]$ time --version
GNU time 1.7
Pero lo que veo es que esta salida la manda por stderr, asi que hay que jugar un poco con los redireccionamientos.

Código:
# Creamos un nuevo descriptor de fichero.
exec 3>&1 

# Ejecutamos el comando, y mandamos el stderr (2>) a stdin (1>) asi lo capturamos con la variable. 
# Por ultimo redireccionamos la salida del comando al nuevo descriptor (3>)
tiempo=`time -f %E wget tuarchivo.zip 2>&1 >&3`  

# Borramos el descriptor que creamos. 
exec 3>&- 

echo "Tiempo total de descarga: $tiempo"
A mi me funcionó bien, pero fijense la version del time y el parametro del comando -f que genera la salida con formato.

Ayudado por mi siempre querida Advanced Bash Scripting Guide - I/O Redirection

Saludos.

Post Edicion: Ojo con lo que recibieron en el mail de aviso del vBulletin porque hice correcciones en el codigo que habia escrito mal.
__________________
¡Volviendo a la programación!

Última edición por AleSanchez; 14/09/2006 a las 09:39
  #7 (permalink)  
Antiguo 14/09/2006, 17:54
Avatar de Sh4ka  
Fecha de Ingreso: marzo-2005
Mensajes: 205
Antigüedad: 19 años, 1 mes
Puntos: 0
Ale,

No anda ni a palos lo que mencionas... guarde tu codigo, cambie el fichero a descargar por uno real, y no va.. , ni siquiera me permite el parámetro "--version" o "-V" para ver la versión

Código:
mellow@machine:~$ sh 1.sh

real    0m0.028s
user    0m0.004s
sys     0m0.000s
Tiempo total de descarga: 1.sh: line 7: -f: orden no encontrada
mellow@machine:~$ head -7 1.sh
#!/bin/bash
# Creamos un nuevo descriptor de fichero.
exec 3>&1

# Ejecutamos el comando, y mandamos el stderr (2>) a stdin (1>) asi lo capturamos con la variable.
# Por ultimo redireccionamos la salida del comando al nuevo descriptor (3>)
tiempo=`time -f %E wget http://server.blabla.com/1.zip 2>&1 >&3`
mellow@machine:~$
  #8 (permalink)  
Antiguo 14/09/2006, 18:09
Avatar de AleSanchez
Colaborador
 
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires, Argentina
Mensajes: 3.692
Antigüedad: 19 años, 7 meses
Puntos: 47
Y quizas sea diferente comando. ¿Por que lo corres con sh?
Mejor trata de hacer ejecutable el archivo 1.sh con chmod +x 1.sh y ejecutalo directamente con ./1.sh
Igual por lo que veo el problema lo causó time

Yo por ejemplo en Mandriva no tengo un manual a traves de man time pero el paquete tiene documentacion a traves de info time
Fijate si ahi podes encontrar algo.
¿Que distribucion utilizas?
__________________
¡Volviendo a la programación!
  #9 (permalink)  
Antiguo 14/09/2006, 18:14
Avatar de Sh4ka  
Fecha de Ingreso: marzo-2005
Mensajes: 205
Antigüedad: 19 años, 1 mes
Puntos: 0
Estoy corriendo ubuntu 6.0.6, pero también intenté correrlo en Fedora 4, y un server RedHat Enterprise 3, y no anda... , y si, también intente dando permisos al archivo y correrlo con ./archivo.sh

info time, no denota nada fuera de lo normal.
  #10 (permalink)  
Antiguo 14/09/2006, 18:22
Avatar de AleSanchez
Colaborador
 
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires, Argentina
Mensajes: 3.692
Antigüedad: 19 años, 7 meses
Puntos: 47
Fijate si en el info time aparece la opcion -f y como usarla.
¿Que dice time --help?
__________________
¡Volviendo a la programación!
  #11 (permalink)  
Antiguo 15/09/2006, 10:36
Avatar de Koveart
Colaborador
 
Fecha de Ingreso: julio-2002
Ubicación: Colombia
Mensajes: 4.407
Antigüedad: 21 años, 9 meses
Puntos: 29
Bueno señores creo que tengo una luz de esperanza para el señor que hizo la pregunta jajaja.

Veamos a dónde me ha llevado mi investigación. Primero que todo yo manejo arch linux, así que me limitaré a mi experiencia con ella. Al parecer en el PATH de ejecución de comandos tenemos un "time" que viene incluido en el kernel por los años de los años, amén, jajaja, así que cuando hacemos un

Cita:
[root@koven perl]# time ls
arch1.pl file.pl filet passwd

real 0m0.007s
user 0m0.004s
sys 0m0.004s
estamos ejcutando la librería time o sea la primera que viene en el manual del "man time", la segunda parte que dice todas las opciones útiles para poder realizar scripts que se llama GNU VERSION no viene instalada por defecto, al menos en arch, y si la instalan verán que la encontrarán en el siguiente path..

Cita:
[root@koven perl]# /usr/bin/time --version
GNU time 1.7
Espero que esto sea de suficiente ayuda, ya la parte de hacer el script no deberías tener problemas Sh4ka...

Saludos
__________________
“Los soñadores no existen, se lo dice un soñador que ha tenido el privilegio de ver realidades que ni siquiera fue capaz de soñar”
  #12 (permalink)  
Antiguo 15/09/2006, 12:44
Avatar de AleSanchez
Colaborador
 
Fecha de Ingreso: septiembre-2004
Ubicación: Buenos Aires, Argentina
Mensajes: 3.692
Antigüedad: 19 años, 7 meses
Puntos: 47
Ah, mira vos. Sabes que en el Mandriva mio tuve que instalarlo para poder hacer las pruebas...
Seguramente Sh4Ka deba hacerlo tambien.
Saludos!
__________________
¡Volviendo a la programación!
  #13 (permalink)  
Antiguo 15/09/2006, 17:48
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Koveart, la verdad es que nunca me lo hubiera imaginado.
Tenés razón, en mi Slackware 10 , si pongo "which time" me aparece "/usr/bin/time", y si ejecuto /usr/bin/time valen todas las opciones !!

Mirá que Linux también tiene sus cositas raras

Bueno, al menos ahora puedo dormir tranquilo , y Sh4ka puede usar ahora simplemente "-f %E" para obtener el tiempo de ejecución como única salida...

¡¡Grande Koveart!!


Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:00.