Shell:是否可以在不使用sleep
的情況下延遲命令?
是否有任何替代品、替代品或 bash 技巧可以在不使用的情況下延遲命令
sleep
?例如,在不實際使用 sleep 的情況下執行以下命令:$ sleep 10 && echo "This is a test"
您有替代方案
sleep
: 它們是at
和cron
。與sleep
這些相反,您需要提供您需要它們執行的時間。
- 通過執行確保
atd
服務正在執行service atd status
。現在假設日期是世界標準時間上午 11:17;如果您需要在 11:25 UTC 執行命令,則語法為:
echo "This is a test" | at 11:25
.現在請記住,
atd
預設情況下不會記錄作業的完成情況。有關更多資訊,請參閱此連結。您的應用程序最好有自己的日誌記錄。
- 您可以在 中安排作業
cron
,更多參考:man cron
查看其選項或crontab -e
添加新作業。/var/log/cron
可以檢查有關作業執行的資訊。僅供參考
sleep system call
,暫停目前執行並根據傳遞給它的參數安排它。編輯:
正如@Gaius 提到的,您還可以在
at
命令中添加分鐘時間。但是可以說時間是12:30:30
,現在您使用now +1 minutes
. 即使指定了 1 分鐘(轉換為 60 秒),at
也不會真正等到12:31:30
執行作業,而是在12:31:00
. 時間單位可以是minutes, hours, days, or weeks
。更多參考man at
例如:
echo "ls" | at now +1 minutes
使用
bash
內置函式,您可以執行以下操作:coproc read -t 10 && wait "$!" || true
休眠 10 秒而不使用
sleep
. 這樣做的coproc
目的是使read
’s stdin 是一個不會有任何東西出來的管道。|| true
是因為的退出狀態將反映 SIGALRM 傳遞,如果設置了該選項wait
,這將導致 shell 退出。errexit
在其他外殼中:
mksh
並且ksh93
有sleep
內置的,在那裡使用其他任何東西沒有意義(儘管它們都支持read -t
)。
zsh
也支持read -t
,但也有一個內置的包裝器select()
,所以你也可以使用:zmodload zsh/zselect zselect -t 1000 # centiseconds
如果您想要安排從互動式 shell 會話執行的東西,另請
zsh/sched
參閱zsh
.