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