【发布时间】:2019-07-30 09:50:51
【问题描述】:
我有一个脚本需要启动一个程序,以便该程序创建和填充一些文件夹。在脚本继续之前,程序只需要短暂运行然后关闭。
但是,当程序被杀死时,脚本不会继续。我该怎么做?
printf "before"
(timeout -sHUP 3s firefox)
printf "after"
我以为我是在子 shell 中启动程序,但我不确定是否是这种情况。
【问题讨论】:
-
timeout在终止运行的程序时返回非零退出状态。如果set -e(或等价的set -o errexit)在这种情况发生时有效,则脚本将立即静默停止。括号 ((...)) 确保程序 is 在子 shell 中运行。这不会改变errexit设置的效果,也不清楚这里为什么使用子shell。 -
我确实设置了
set -o errexit。有什么方法可以专门忽略超时错误但保留errexit?