我很想“包装”任何我输入的命令,如果它花费超过 20 秒才能完成,我可以运行通知命令。
就像是:
$ sleep 30
从概念上讲,会做类似的事情:
elapsed=real_time $(sleep 30);
if [ $elapsed > 20 ];
say "Done";
fi
这可能吗?
答案1
您可以将一个设置SIGALRM
为在特定时间后触发,并在所有作业完成后取消它。不过,这在纯 shell 脚本中很难做到。timeout
GNU coreutils 中的命令是一个方便且相当用户友好的起点。
如果你想将它集成到你的交互式 shell 中,你可以把它放在一个DEBUG
陷阱中。也许可以看看https://askubuntu.com/a/409801/25077
答案2
如果您打算运行一个长时间运行的命令,则可以执行以下操作:
sleep 30 && say "hi"
您不想为每个命令手动添加此功能,但话又说回来,您确实应该知道快速ls
命令和较长运行brew install
等之间的区别make
,您可能会期望运行一段时间。