2009-06-30 147 views
0

我正在使用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

你沒有發生過使用windows/Cygwin並錯誤地切換到\ r \ n行結尾? – Boldewyn 2009-06-30 15:00:00

回答

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

重定向標準輸出和標準錯誤從runtest.py到文件〜/到/ reptest/runTest方法,all.out。$我。你的文本來自你刪除的陳述。

你感興趣的是什麼可能是這樣的:

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

其中在子shell中運行蟒蛇runtest.py並重定向它的標準錯誤到標準輸出,從子shell輸出然後通過管道將進入「三通〜/進入/ reptest/runTest方法,all.out。$ I」。除了將它複製到標準輸出外,tee還將它保存到作爲參數給出的文件中。至於爲什麼你的程序等待,直到你發送SIGINT,我不確定,我沒有看到任何與bash有關的東西,這會讓你的腳本掛起直到被中斷。