2012-03-29 35 views
10

Vì vậy, tôi đã tự hỏi nếu có một lệnh bash cho phép tôi ngã ba một quá trình mà ngủ trong vài giây, sau đó thực hiện một lệnh.Kịch bản Bash làm thế nào để ngủ trong quá trình mới sau đó thực hiện một lệnh

Dưới đây là một ví dụ:

sleep 30 'echo executing...' & 

^Điều này không thực sự làm việc (vì lệnh sleep chỉ mất đối số thời gian), nhưng có cái gì đó có thể làm một cái gì đó như thế này? Vì vậy, về cơ bản, một lệnh ngủ có một đối số thời gian và một cái gì đó để thực hiện khi khoảng thời gian được hoàn thành? Tôi muốn có thể chia nó thành một quy trình khác rồi tiếp tục xử lý kịch bản lệnh shell.

Ngoài ra, tôi biết tôi có thể viết một kịch bản đơn giản thực hiện điều này, nhưng do một số hạn chế đối với tình huống (tôi thực sự chuyển qua cuộc gọi ssh), tôi không muốn làm điều đó.

Trả lời

10

Bạn có thể gọi một vỏ ở chế độ nền và làm cho nó làm những gì bạn muốn:

bash -c 'sleep 30; do-whatever-else' & 

Khoảng cách mặc định cho giấc ngủ là chỉ trong vài giây, vì vậy trên sẽ ngủ trong vòng 30 giây. Bạn có thể chỉ định các khoảng thời gian khác như: 30m trong 30 phút hoặc 1h trong 1 giờ hoặc 3d trong 3 ngày.

+0

Cảm ơn! Điều đó đã làm các trick. :) – David

21

Bạn có thể làm

(sleep 30 && command ...)& 

Sử dụng && là an toàn hơn ; vì nó đảm bảo rằng command ... sẽ chỉ chạy nếu hẹn giờ ngủ hết hạn.

+0

Cảm ơn! Sạch hơn nhiều! – cwohlman

Các vấn đề liên quan