( sleep 300 ; echo "80" > /sys/class/leds/blue/brightness ) &
Dessa forma, seu script continua ou você restaura o controle imediatamente, enquanto uma nova tarefa em segundo plano do script é iniciada, com dois comandos: suspensão e eco.
O erro comum é tentar dar tanto sleep
ou echo
ou ambos o &
que não vai funcionar como pretendido. O lançamento de uma série de comandos os ()
gera em um processo de shell separado, com o qual você pode enviar todo em segundo plano &
.
Nesse sentido, onde eu o achei ativamente útil. Em um dispositivo incorporado que desenvolvo, há o aplicativo principal que funciona com um cão de guarda. Se ele falhar de uma maneira que acione a redefinição do watchdog logo após a inicialização, repetidamente, é difícil corrigir remotamente, pois o período entre o início do sistema operacional e a redefinição é bastante curto, não é suficiente para sincronizar e bloquear a inicialização do aplicativo. Então, eu preciso de uma maneira de determinar o sistema reiniciado tão rápido e introduzir um atraso, se houver, para me dar tempo para corrigi-lo manualmente.
[ -f /tmp/startdelay ] && sleep 30
touch /tmp/startdelay
( sleep 30 ; rm /tmp/startdelay ) &
[ -f /tmp/noautostart ] && exit 0
start_app
Se eu efetuar login e executar touch /tmp/noautostart
o aplicativo principal, não será iniciado. Se o cão de guarda rm /tmp/startdelay
entrar em ação, não será executado e na próxima vez que o sistema for iniciado, me dará 30s extras para pará-lo. Caso contrário, o reinício será rápido, sem demora.
&
fundo para dormir; "você também precisa dormir em segundo plano" estava na primeira linha desde o início. Se você não acredita em mim, veja o histórico de edições. E minha resposta é de 5 minutos mais velho do que sua: P()
grupo, o shell original será pausado até que o desovado termine.)use o
at
comandoque será executado em segundo plano
fonte
echo
completamente usando um heredoc ou herestring.at
é um comando POSIX padrão. Qual sistema Unix-like não o tem disponível por padrão?Se você deseja que algo seja executado em 5 minutos, mas o restante do seu programa continue (ou termine), você também precisará adormecer:
Isso será impresso
hello
e, em seguida, 3 segundos depois (após a saída do programa principal), imprimaworld
.A parte importante é
&
colocar a execução da função em segundo plano.fonte
runWithDelay () { sleep $1; "${@:2}"; }
vez disso , posso sugerir ?doWhateverWithDelay 3 &
no seu segundo exemplo.$@
é que você pode citá-lo e será expandido como uma lista de palavras citadas. Então é melhor fazê-lo"$@"
(ou"${@}"
se você gosta do aparelho). Veja pastebin.com/MU7hbB2C-n
), mas obviamente isso foi um pouco ingênuo.