dormir es un comando muy popular y podemos comenzar a dormir desde 1 segundo:
# wait one second please
sleep 1
pero, ¿cuál es la alternativa si necesito esperar solo 0.1 segundos o entre 0.1 y 1 segundo?
- comentario: en linux u OS X
sleep 0.XXX
funciona bien, pero en solarissleep 0.1
osleep 0.01
- sintaxis ilegal
echo "" >/dev/null
Respuestas:
Bash tiene una suspensión "cargable" que admite segundos fraccionarios y elimina los gastos generales de un comando externo:
Entonces:
La desventaja es que es posible que los archivos cargables no se proporcionen con su
bash
binario, por lo que necesitaría compilarlos usted mismo como se muestra (aunque en Solaris no sería necesariamente tan simple como arriba).A partir de
bash-4.4
(septiembre de 2016), todas las herramientas cargables ahora están compiladas e instaladas de forma predeterminada en plataformas que lo admiten, aunque están compiladas como archivos de objetos compartidos separados y sin.so
sufijo. A menos que su distribución / sistema operativo haya hecho algo creativo, debería poder hacer lo siguiente:(La página del manual implica que
BASH_LOADABLES_PATH
se configura automáticamente, creo que este no es el caso en la distribución oficial a partir de 4.4.12. Si se configura correctamente y soloenable -f filename commandname
cuando sea necesario).Si eso no es adecuado, lo siguiente más fácil de hacer es construir u obtener
sleep
de coreutils de GNU, esto es compatible con la función requerida. Elsleep
comando POSIX es mínimo, las versiones anteriores de Solaris implementaron solo eso. Solaris 11sleep
hace apoyar fracciones de segundo.Como último recurso, puede usar
perl
(o cualquier otra secuencia de comandos que tenga a mano) con la advertencia de que la inicialización del intérprete puede ser comparable al tiempo de sueño previsto:fuente
expect
, probablemente puedas usar "after N
", donde N es milisegundos, directamente en tu script.usleep
como @Luis Vazquez y @sebix writeLa documentación para el
sleep
comando de coreutils dice:Por lo tanto, puede usar
sleep 0.1
,sleep 1.0e-1
y argumentos similares.fuente
Sleep acepta números decimales para que pueda desglosar esto como:
1/2 de segundo
1/100 de segundo
Entonces por un milisegundo querrías
fuente
sleep .5
Pruebe esto para determinar la precisión:
Combinación de la solución de mr.spuratic y la solución de coles .
fuente
Simplemente puede usar
usleep
. Toma microsegundos (= 1e-6 segundos) como parámetro, por lo que para dormir 1 milisegundo ingresaría:fuente
$ usleep
No command 'usleep' found, did you mean:
Command 'sleep' from package 'coreutils' (main)
usleep: command not found
usleep
parte delinitscripts
paquete que es estándar al menos en todas las distribuciones derivadas de Red Hat; incluyendo al menos RHEL, CentOS, Fedora, Mageia / Mandriva y SuSE. Aquí un ejemplo: `` ``sleep
(desde coreutils ) funciona con segundos -usleep
(desde initscripts ) funciona con microsegundosTuve el mismo problema (sin shell usleep en Solaris), así que escribí el mío así:
No verifica los argumentos: recomendaría uno correctamente escrito si desea conservarlo, pero eso (gcc usleep.c -o usleep) lo sacará de un agujero.
fuente
usleep()
llamada simpleif(argc == 1) { usleep(atoi(argv[1])); }
para evitar la indexación fuera de los límites de la matriz, lo que puede conducir a una cantidad de comportamientos inesperados.if (argc == 2) { usleep(atoi(argv[1])); }
...usleep
unidad es μs, por lo que para esperar 1 segundo, debe proporcionar un argumento 1000000.atoi()
Es una elección horrible convertir una cadena en unint
. ¿Quéatoi( "STRING" )
devuelve?atoi()
no tiene forma de devolver ningún error.Me gusta la idea usleep, pero no puedo hacer un comentario debajo. Como esto me ayudó, espero que mi sugerencia pueda mejorar la idea del sueño.
https://github.com/fedora-sysv/initscripts/blob/3c3fe4a4d1b2a1113ed302df3ac9866ded51b01b/src/usleep.c es el código fuente real de usleep.c en el ecosistema redhat.
Intenta compilar eso en tu Solaris. Probablemente necesite https://www.opencsw.org/packages/libpopt0/ .
fuente