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

Odpowiedzi:


54

Po prostu użyj sleep 1w Bash.

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

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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.