我正在使用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为止。输出会发生什么?如何取回我的文字墙?
答案 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相关的内容,这会使你的脚本挂起直到被打断。