Bash等待立即终止?
我想在命令完成后播放声音,但前提是命令耗时超过一秒钟 我有以下代码(从中复制并稍加修改):Bash等待立即终止?,bash,job-control,Bash,Job Control,我想在命令完成后播放声音,但前提是命令耗时超过一秒钟 我有以下代码(从中复制并稍加修改): 不过,第二行的“等待”似乎立即终止。我尝试了-f标志,但行为没有改变。如何使“wait”真正等待?问题是您正在子shell中运行wait。shell只能等待它自己的子进程,但您尝试等待的进程是子shell的兄弟进程,而不是子进程 无需为此使用等待。您从中复制代码的问题是,如果一个进程花费的时间超过N秒,那么它是否会终止该进程,而不是告诉您一个命令花费了多长时间 您可以使用SECONDS变量来判断所用时间是
不过,第二行的“等待”似乎立即终止。我尝试了-f标志,但行为没有改变。如何使“wait”真正等待?问题是您正在子shell中运行
wait
。shell只能等待它自己的子进程,但您尝试等待的进程是子shell的兄弟进程,而不是子进程
无需为此使用等待
。您从中复制代码的问题是,如果一个进程花费的时间超过N秒,那么它是否会终止该进程,而不是告诉您一个命令花费了多长时间
您可以使用SECONDS
变量来判断所用时间是否超过1秒。此变量包含shell启动后的秒数,因此只需检查它是否增加
start=$SECONDS
$COMMAND
if (($SECONDS > $start))
then
paplay "$SOUND"
fi
我可能希望简化此过程以捕获数据(从epoch开始以秒为单位),然后比较差异(如果>1秒,则播放声音),例如:
start=$SECONDS
$COMMAND
if (($SECONDS > $start))
then
paplay "$SOUND"
fi
prgstart=$(date '+%s') # grab current time in terms of # of seconds since epoch
$COMMAND # run command in foreground => no need for sleep/wait/etc; once it completes ...
prgend=$(date '+$s') # grab current time in terms of # of seconds since epoch
if [[ $(( ${prgend} - ${prgstart} )) -gt 1 ]]
then
paplay "$SOUND"
fi