Comment faire exécuter le script bash avec une latence (c'est-à-dire attendre 1 seconde à chaque itération)?

28

J'ai ce script bash;

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

Fondamentalement, je préférerais qu'il y ait un délai d'une seconde entre chaque itération. La raison en est qu'à chaque itération, il envoie le fichier programme mycomputation"${i}$.pbsà un nœud principal pour résolution. La motivation est que la résolution dans ce cas implique l'utilisation de nombres pseudo-aléatoires et que le RNG que j'utilise (R) utilise le temps CPU comme graine.

Alors, comment demander à bash

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

Réponses:

54

Utilisez simplement sleep 1dans Bash.

for (( i = 1 ; i <= 160 ; i++ )); do
  sleep 1
  qsub myccomputations"${i}".pbs
done
shellholic
la source
vous pouvez utiliser un nombre à virgule flottante si vous souhaitez dormir moins de 1 seconde
shellholic
0

Si vous voulez réaliser ce que votre sujet suggère, vous devez utiliser «at».

Voir

      man at

pour plus d'informations.

Olli
la source
1
merci Olli. En effet, je vais réécrire le titre, donc il correspond à la question, pour les futures requêtes.
user2413
atne suspendra pas une boucle pendant une durée spécifique, mais définira un programme / script à exécuter à un moment précis.
Soren A