Jak sprawić, by skrypt bash działał z opóźnieniem (tj. Odczekaj 1 sekundę przy każdej iteracji)?

28

Mam ten skrypt bashowy;

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

Zasadniczo wolałbym, aby między każdą iteracją występowało 1 sekundowe opóźnienie. Powodem jest to, że przy każdej iteracji wysyła plik programu mycomputation"${i}$.pbsdo węzła podstawowego w celu rozwiązania. Motywacja jest taka, że ​​rozwiązanie w tym przypadku wymaga użycia pseudolosowych liczb, a RNG, którego używam (R), wykorzystuje czas procesora jako zalążek.

Więc jak poprosić bash

for (( i = 1 ; i <= 160 ; i++ )); do
  wait 1 sec    
  qsub myccomputations"${i}".pbs
done
użytkownik2413
źródło

Odpowiedzi:

54

Po prostu użyj sleep 1w Bash.

for (( i = 1 ; i <= 160 ; i++ )); do
  sleep 1
  qsub myccomputations"${i}".pbs
done
shellholic
źródło
możesz użyć liczby zmiennoprzecinkowej, jeśli chcesz spać krócej niż 1 sekundę
shellholic
0

Jeśli chcesz osiągnąć to, co sugeruje Twój temat, powinieneś użyć „at”.

Widzieć

      man at

po więcej informacji.

Olli
źródło
1
dziękuję Olli. Rzeczywiście, przepisuję tytuł, aby odpowiadał pytaniu w przypadku przyszłych zapytań.
user2413
atnie zawiesi pętli na określony czas, ale ustawi program / skrypt do wykonania w określonym czasie.
Soren A,