重定向测试输出

时间:2009-06-30 14:56:08

标签: bash shell scripting

我正在使用bash脚本为其他一些代码自动执行一组测试。脚本如下所示:

for i in $(seq 1 10)
do
  cd ~/BuildBot
  rm -rf program        # Remove the directory each time to test installation
  git clone /localrepo/
  cd ~/into/program
  python2.6 setup.py build_ext -i
  cd tests

  python runtest.py >& ~/into/reptest/runtest-all.out.$i
  echo $? > ~/into/reptest/runtest-all.exit.$i

done

当像这样运行时,脚本会执行我想要的操作 - 向我显示一个文本墙,并将其保存到目录reptest中的文件中。既然我已经测试了安装,那么等待整个程序重新安装会变得很烦人。但是,当我将脚本剪切到

for i in $(seq 1 10)
do
  cd ~/into/program/tests

  python runtest.py >& ~/into/reptest/runtest-all.out.$i
  echo $? > ~/into/reptest/runtest-all.exit.$i

done

脚本挂起,没有任何反应,shell等待空行,直到我按Ctrl-C为止。输出会发生什么?如何取回我的文字墙?

1 个答案:

答案 0 :(得分:0)

python runtest.py >& ~/into/reptest/runtest-all.out.$i

将stdout和stderr从runtest.py重定向到文件〜/ into / reptest / runtest-all.out。$ i。你的文字墙来自你已经修剪过的陈述。

您感兴趣的可能是:

( python runtest.py 2>&1 ) | tee ~/into/reptest/runtest-all.out.$i

在子shell中运行python runtest.py并将其stderr重定向到stdout,然后将该子shell的输出传递到“tee~ / into / reptest / runtest-all.out。$ i”。除了将它复制到stdout之外,tee将它的stdin保存到作为参数给出的文件中。

至于为什么你的程序会等到你发送SIGINT为止,我不确定,我没有看到任何与bash相关的内容,这会使你的脚本挂起直到被打断。