【发布时间】:2013-06-29 17:01:58
【问题描述】:
我需要在 bash 脚本中运行命令并在运行时间过长时将其终止。我还需要将所有输出捕获到一个变量中。如果命令首先完成,我需要释放/终止看门狗进程(例如睡眠),因为我可能会运行此类命令的列表。
不幸的是,我无法使用“超时”命令,否则我可以这样做:
output=`timeout -s 9 $TIMEOUT my-command`
并检查退出代码 124 以查看是否有超时。
因此我选择的解决方案是by @Dmitry to a similar question:
( my_command ) & pid=$!
( sleep $TIMEOUT && kill -HUP $pid ) 2>/dev/null & watcher=$!
wait $pid 2>/dev/null && pkill -HUP -P $watcher
很遗憾,以下内容没有捕获到 $output 的任何内容:
( output=`my_command` ) & pid=$!
我可以将输出转储到文件中,然后像这样将其加载到变量中,但我宁愿不使用文件:
( `my_command >$outfile` ) & pid=$!
...
output=`cat $outfile`
rm -f $outfile
我的问题:有没有更好的方法?理想情况下在不使用文件的情况下也将 stderr 捕获到另一个变量?
【问题讨论】: