2009-06-30 1 views
0

Ich verwende ein Bash-Skript, um eine Reihe von Tests für einen anderen Code zu automatisieren. Das Skript sieht wie folgt aus:Umleiten der Testausgabe

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 

Wenn wie folgt ausführen, wird das Skript tut, was ich will - zeigt mir eine Mauer von Text, und speichert sie in einer Datei im Verzeichnis reptest. Jetzt, da ich die Installation getestet habe, wird es nervig, auf die Neuinstallation des gesamten Programms warten zu müssen. Allerdings, wenn ich schneiden Sie das Skript nach unten zu

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 

Das Skript hängt, geschieht nichts, die Shell wartet auf eine leere Zeile, bis ich Ctrl-C es. Was passiert mit der Ausgabe? Wie bekomme ich meine Textwand zurück?

+0

Sie sind nicht dabei, Windows/Cygwin zu verwenden und haben versehentlich auf die Zeilenenden geschaltet? – Boldewyn

+0

Btw: Ich denke, die Ausgabedateien werden nicht alle erstellt? – Boldewyn

+0

Sie müssen seq nicht verwenden, das Sie verwenden können: "for i in {1..10}". Ändern Sie "python" in "echo" und sehen Sie, was passiert. Das würde python oder runtest.py als Täter ausschließen. –

Antwort

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

Leitet Fehler- und Standardausgaben von runtest.py in die Datei ~/in/reptest/runtest-all.out. $ I. Ihre Textwand kommt von den Anweisungen, die Sie weggeschnitten haben.

Was Sie interessiert sind wahrscheinlich so etwas wie:

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

Welche Python runtest.py in einer Subshell läuft und leitet es an stdout stderr, dann die Ausgabe des Befehls dieser Subshell in „T-Stück ~/in/reptest/runtest-all.out. $ i ". Abschlag speichert es ist stdin in die Datei als Argument zusätzlich zum Kopieren in stdout gegeben.

Warum Ihre Programme warten, bis Sie es senden SIGINT, ich bin mir nicht sicher, ich sehe nichts bash-related, die Ihr Skript hängen lassen sollte, bis unterbrochen.