Wie kann man ein Bash-Skript mit einer Wartezeit ausführen lassen (dh 1 Sekunde bei jeder Iteration warten)?

28

Ich habe dieses Bash-Skript;

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

Grundsätzlich würde ich es vorziehen, wenn zwischen jeder Iteration eine Verzögerung von 1 Sekunde liegt. Der Grund dafür ist, dass bei jeder Iteration die Programmdatei mycomputation"${i}$.pbszur Lösung an einen Kernknoten gesendet wird. Die Motivation ist, dass das Lösen in diesem Fall die Verwendung von Pseudozufallszahlen beinhaltet und das von mir verwendete RNG (R's) CPU-Zeit als Startwert verwendet.

Also, wie fragst du Bash?

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

Antworten:

54

Einfach sleep 1in Bash verwenden.

for (( i = 1 ; i <= 160 ; i++ )); do
  sleep 1
  qsub myccomputations"${i}".pbs
done
Shellholic
quelle
Sie können Fließkommazahl verwenden, wenn Sie weniger als 1 Sekunde schlafen möchten
Shellholic
0

Wenn Sie das erreichen möchten, was Ihr Thema vorschlägt, sollten Sie 'at' verwenden.

Sehen

      man at

für mehr Informationen.

Olli
quelle
1
danke Olli. In der Tat werde ich den Titel für zukünftige Anfragen umschreiben, damit er der Frage entspricht.
user2413
atsetzt eine Schleife nicht für eine bestimmte Dauer aus, sondern legt ein Programm / Skript zur Ausführung zu einer bestimmten Zeit fest.
Soren A