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

Antworten:


54

Einfach sleep 1in Bash verwenden.

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

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.