如果任何命令需要超过 20 秒才能完成,则运行任意脚本

如果任何命令需要超过 20 秒才能完成,则运行任意脚本

我很想“包装”任何我输入的命令,如果它花费超过 20 秒才能完成,我可以运行通知命令。

就像是:

$ sleep 30

从概念上讲,会做类似的事情:

elapsed=real_time $(sleep 30);
if [ $elapsed > 20 ];
 say "Done";
fi

这可能吗?

答案1

您可以将一个设置SIGALRM为在特定时间后触发,并在所有作业完成后取消它。不过,这在纯 shell 脚本中很难做到。timeoutGNU coreutils 中的命令是一个方便且相当用户友好的起点。

如果你想将它集成到你的交互式 shell 中,你可以把它放在一个DEBUG陷阱中。也许可以看看https://askubuntu.com/a/409801/25077

答案2

如果您打算运行一个长时间运行的命令,则可以执行以下操作:

sleep 30 && say "hi"

您不想为每个命令手动添加此功能,但话又说回来,您确实应该知道快速ls命令和较长运行brew install等之间的区别make,您可能会期望运行一段时间。

相关内容