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.