Despertador en una linea de ordenes con el comando sleep

[h]Transformar tu consola en un despertador gracias a una simple linea de ordenes con sleep [/h]

http://i.giphy.com/6GY01XQBkf3lS.gif

Con un poco de imaginación podemos hacer muchísimas cosas con nuestra consola bash sin tener ni idea de programación…
Para hacer un despertador no necesitamos nada mas que sleep y una canción bonita (o un ruido insoportable) para reproducirla en nuestro lector multimedia.

[h]El comando sleep[/h]

El comando sleep es para hacer pausas.
Nuestra consola “duerme” durante un tiempo que definimos
Es un comando ultra simple a emplear, sin opciones (otras que help y version) …

[code]sleep --help
Modo de empleo: sleep NÚMERO[SUFIJO]…
o bien: sleep OPCIÓN

Hace una pausa de NÚMERO segundos. El SUFIJO puede ser ‘s’ para segundos
(predeterminado), `m’ para minutos, ‘h’ para horas o ‘d’ para días.
Al contrario de la mayoría de las implementaciones que exigen que
NÚMERO sea un entero, aquí NÚMERO puede ser un número de coma flotante
arbitrario. Dados dos o más argumentos, hace una pausa por la cantidad
de tiempo especificada por la suma de sus valores.

  --help     muestra esta ayuda y finaliza
  --version  informa de la versión y finaliza

ayuda en línea sobre GNU coreutils: http://www.gnu.org/software/coreutils/
Informe de errores de traducción en sleep a http://translationproject.org/team/es.html
Full documentation at: http://www.gnu.org/software/coreutils/sleep
or available locally via: info ‘(coreutils) sleep invocation’
[/code]

Entonces para hacer una pausa de 5 segundos es así:

sleep 5

Si ejecutas este código en consola veras que durante 5 segundos no puedes hacer nada en consola y luego vuelves a poder entrar ordenes.
Por defecto se usan segundos.
Si quieres usar otra unidad de tiempo debes añadir el sufijo correspondiente :
[list=*]
*]m para minutos
Una pausa de 5 minutos se hace con

sleep 5m

]h para horas y d para días /]
[/list]
Puedes usar varios argumentos…
Por ejemplo; una pausa de 6 horas y 15 minutos se puede hacer así

sleep 6h 15m

…en lugar de

sleep 375m

Nada más que añadir sobre el comando sleep, no es nada complicado. :wink:

Me vais a preguntar
…¿Pero a que coño sirve hacer pausas en consola?
Cuando hacemos un script nos damos cuenta que es a veces necesario para encadenar ordenes porque necesitan una ligera pausa entre ellas.
Siempre en el contexto del “scritping” es también a menudo necesario para dejar el tiempo al usuario de leer unos mensajes.
Por ejemplo :

echo "Ejecutando wash en búsqueda de objetivos" && sleep 3 && wash -i wlan0mon   

El mensaje “Ejecutando wash en búsqueda de objetivos” se queda así 3 segundos en consola antes de que desaparezca porque se ejecuta wash.
Estos son casi choradas en comparación con la función de sleep que es programar la ejecución de tareas.

[h]Despertador bash[/h]
Es solo un pequeño truco sin pretensiones visto aquí :
How to practically use your Linux terminal (four examples) @ howtoforge
¿Que es un despertador?
En esencia es un programa que ejecuta una tarea ( leer un archivo musical ) en un momento definido.

sleep <tiempo_para_dormir> && <lector_multimedia> ruta_fichero_música

Son las 11 de la noche ahora…
Por ejemplo, si quiero madrugar mañana - algo como las dos de la tarde -, pongo mi alarma dentro de 15 horas.

sleep 15h && cvlc '/home/kcdtv/Música/Radioactive cake/03 - Fagin'\''s Reject - Occult Boogaloo (Radioactive.Cake Remix).flac'   

[list=]
]sleep 15h
Nuestra consola se queda inactiva durante 15 horas/
]
]&&
permite ejecutar otra orden después que se haya ejecutado la primera (sleep 15 horas, es decir no hacer nada durante 15 horas) /
]
]cvlc <ruta_archivo>
Uso
* cvlc** en lugar de vlc para no abrir la interfaz gráfica de vlc/
]
[/list]

Como siempre, un pequeño vinculo hacía la pagina de referencia, la man page :
[list=*]
]sleep @ Linux man page/]
[/list]

y si no sabeis el nombre del ejecutable por defecto del tipo de fichero multimedia… podeis usar

xdg-open "ruta cancion"

xdg-open se encargara de saber que programa esta por defecto para tal o cual fichero …

con xdg-open funcionara aunque cambies de reproductor multiemdia. :slight_smile: