你在这里问两个完全不同的事情。首先,您询问如何在一分钟后发出哔声,然后您要求在命令完成后发出哔声。这是两件完全不同的事情。
# bof [command] [args...] - Beep on Finish
bof() {
"$@"; local r=$?
printf '\a'
return $r
}
该函数运行一个命令,然后在命令完成后发出一次哔声,同时确保命令的退出代码是函数的退出代码。
# bot [command] [args...] - Beep on Timeout
bot() {
{ sleep 60; printf '\a'; } &
"$@"; local r=$?
kill $!
return $r
}
60
除非命令在该时间之前完成(此处为秒,一分钟),否则此功能会在特定时间后发出一次哔声。
# bem [command] [args...] - Beep every Minute
bem() {
{ while sleep 60; do printf '\a'; done; } &
"$@"; local r=$?
kill $!
return $r
}
这是对早期功能的简单改编,只要您的命令仍然存在,它就会每分钟发出哔声。
# bofem [command] [args...] - Beep on Finish every Minute
bofem() {
"$@"; local r=$?
until read -t 60 -n 1; do printf '\a'; done
return $r
}
最后,每分钟发出哔声的功能,但仅在命令完成后。一直发出哔哔声,直到你按下一个键来停止它。然后,该函数返回您的命令的退出代码。
我认为这将涵盖您可能针对您的问题提出的所有基础。
像这样使用(和组合)它们:
bof rsync foo bar: # Beep when rsync finishes.
bot ssh foo 'ls bar/' # Beep if the 'ssh' process takes too long to run.