( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &
De esa manera, su secuencia de comandos continúa o restaura el control de inmediato, mientras se inicia una nueva tarea en segundo plano de la secuencia de comandos, con dos comandos: suspensión y eco.
El error común es tratar de dar, ya sea sleep
o echo
bien conjuntamente la &
que no funcionará como se pretende. Lanzar una serie de comandos en ()
aunque los genera en un proceso de shell separado, que luego puede enviar todo en segundo plano &
.
A ese ingenio, donde lo encontré activamente útil. En un dispositivo integrado que desarrollo, está la aplicación principal que funciona con un perro guardián. Si falla de una manera que activa el reinicio de watchdog poco después del inicio, en varias ocasiones, es difícil de solucionar de forma remota ya que el período entre el inicio del sistema operativo y el reinicio es bastante corto, no es suficiente para ingresar y bloquear el inicio de la aplicación. Por lo tanto, necesito una forma de determinar si el sistema se reinició tan rápido e introducir un retraso si lo hizo, para darme tiempo para solucionarlo manualmente.
[ -f /tmp/startdelay ] && sleep 30
touch /tmp/startdelay
( sleep 30 ; rm /tmp/startdelay ) &
[ -f /tmp/noautostart ] && exit 0
start_app
Si inicio sesión y realizo touch /tmp/noautostart
la aplicación principal, no se iniciará. Si el watchdog se activa, rm /tmp/startdelay
no se realizará y la próxima vez que se inicie el sistema, me dará 30 segundos adicionales para detenerlo. De lo contrario, el reinicio será rápido, sin demora.
&
fondo del sueño; "también necesitas dormir en segundo plano" estaba en la primera línea desde el principio. Si no me crees, mira el historial de edición. Y mi respuesta es 5 minutos mayor que la tuya: P()
grupo, el shell original se detendrá hasta que el generado termine).usa el
at
comandoque se ejecutará en segundo plano
fuente
echo
por completo mediante el uso de un heredoc o herejía.at
es un comando POSIX estándar. ¿Qué sistema tipo Unix no lo tiene disponible por defecto?Si desea que algo se ejecute en 5 minutos, pero el resto de su programa continúe (o termine), también necesita poner en segundo plano el sueño:
Esto imprimirá
hello
y luego 3 segundos después (después de que el programa principal haya salido), imprimaworld
.La parte importante es la
&
bifurcación de la ejecución de la función en segundo plano.fuente
runWithDelay () { sleep $1; "${@:2}"; }
lugar?doWhateverWithDelay 3 &
en su segundo ejemplo.$@
es que puede citarlo y se expandirá como una lista de palabras citadas. Así que mejor hazlo"$@"
(o"${@}"
si te gustan los frenillos). Ver pastebin.com/MU7hbB2C-n
), pero obviamente eso fue un poco ingenuo.