Execute o comando após segundos (sem dormir)

14

Como posso executar um comando após X segundos sem dormir. Ou com o sono, mas sem o shell apenas aguardar a resposta desse comando?

Eu usei isso, mas não funcionou

sleep 5 ; ls > a.txt

Eu preciso executá-lo em segundo plano. Eu tento não ter que executá-lo em um script Eu tento executar ls após 5 segundos, e o shell não espera apenas o fim do sono

    
por Martin 04.04.2013 / 19:25

2 respostas

30

Uma maneira mais concisa de escrever o que Hennes sugeriu é

(sleep 5; echo foo) & 

Como alternativa, se precisar de mais do que alguns segundos, você pode usar at . Existem três maneiras de dar um comando para at :

  1. Encaixe:

    $ echo "ls > a.txt" | at now + 1 min
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  2. Salve o comando que você deseja executar em um arquivo de texto e passe esse arquivo para at :

    $ echo "ls > a.txt" > cmd.txt
    $ at now + 1 min < cmd.txt
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  3. Você também pode passar os comandos at do STDIN:

    $ at now + 1 min
    warning: commands will be executed using /bin/sh
    at> ls
    

    Em seguida, pressione Ctrl D para sair do shell at . O comando ls será executado em um minuto.

Você pode fornecer tempos muito precisos no formato [[CC]YY]MMDDhhmm[.ss] , como em

$ at -t 201412182134.12 < script.sh

Isso executará o script script.sh às 21:34 e 12 segundos no dia 18 de dezembro de 2014. Assim, em teoria, você pode usar at para executar algo cinco segundos no futuro. No entanto, isso é meio que usar um tanque para acertar uma mosca, e a sugestão de Hennes é melhor.

    
por 04.04.2013 / 20:18
4

Você pode contornar isso iniciando um shell ou um script em segundo plano.

Exemplo:

/bin/sh -c "sleep 5 ; echo foo" &
[1] 63791
>                               Active shell prompt here

foo                             5 second later output appears.
    
por 04.04.2013 / 19:43