Como fazer com que o script bash seja executado com uma latência (ou seja, aguarde 1 segundo a cada iterações)?

28

Eu tenho esse script bash;

for (( i = 1 ; i <= 160 ; i++ )); do
  qsub myccomputations"${i}".pbs
done

Basicamente, eu preferiria se houvesse um atraso de 1 segundo entre cada iteração. O motivo é que, a cada iteração, ele envia o arquivo do programa mycomputation"${i}$.pbspara um nó principal para solução. A motivação é que a solução nesse caso envolve o uso de números pseudo-aleatórios e o RNG I use (R's) usa o tempo da CPU como semente.

Então, como você pede ao bash para

for (( i = 1 ; i <= 160 ; i++ )); do
  wait 1 sec    
  qsub myccomputations"${i}".pbs
done
user2413
fonte

Respostas:

54

Basta usar sleep 1no Bash.

for (( i = 1 ; i <= 160 ; i++ )); do
  sleep 1
  qsub myccomputations"${i}".pbs
done
shellholic
fonte
você pode usar o número de ponto flutuante se você quiser dormir menos de 1 segundo
shellholic
0

Se você deseja alcançar o que seu tópico sugere, use 'at'.

Vejo

      man at

Para maiores informações.

Olli
fonte
11
obrigado Olli. Na verdade, vou reescrever o título, para que ele corresponda à pergunta, para consultas futuras.
user2413
atnão suspenderá um loop por um período específico, mas definirá um programa / script para execução em um horário específico.
Soren Um