Làm cách nào để tạo tập lệnh bash chạy với độ trễ (tức là đợi 1 giây ở mỗi lần lặp)?


28

Tôi có kịch bản bash này;

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

Về cơ bản, tôi thích nếu có độ trễ 1 giây giữa mỗi lần lặp. Lý do là tại mỗi lần lặp, nó sẽ gửi tệp chương trình mycomputation"${i}$.pbsđến một nút lõi để giải quyết. Động lực là việc giải quyết trong trường hợp này liên quan đến việc sử dụng các số ngẫu nhiên giả và RNG tôi sử dụng (R) sử dụng thời gian CPU làm hạt giống.

Vậy làm thế nào để bạn yêu cầu bash

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

Câu trả lời:


54

Đơn giản chỉ cần sử dụng sleep 1trong Bash.

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

bạn có thể sử dụng số dấu phẩy động nếu bạn muốn ngủ ít hơn 1 giây
shellholic

0

Nếu bạn muốn đạt được những gì chủ đề của bạn gợi ý, bạn nên sử dụng 'at'.

Xem

      man at

để biết thêm thông tin.


1
cảm ơn bạn Thật vậy, tôi sẽ viết lại tiêu đề, vì vậy nó tương ứng với câu hỏi, cho các truy vấn trong tương lai.
dùng2413

atsẽ không tạm dừng một vòng lặp trong một thời lượng cụ thể, nhưng đặt chương trình / tập lệnh để thực thi tại một thời điểm cụ thể.
Soren A
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.