Stworzyłem kilka fragmentów kodu - w Pythonie i C - które muszą być uruchamiane wiele razy, każdy z nowym zestawem wartości wejściowych. Aby to zrobić, stworzyłem skrypt powłoki Unixa, który powinien uruchamiać różne programy dla wielu różnych danych wejściowych:
#!/bin/sh
_file="${1:-/dev/null}"
while IFS=' ' read -r f1 f2 f3 f4
do
cd folder1
cd folder2
echo "$f1 $f2 $f3 $f4 " > inputs.txt
mpiexec -n 4 a_C_code
cd ..
cd ..
python3 python_code_1.py
python python_code_2.py
python python_code_3.py
python python_code_4.py
echo "$f1" #So I know how many times the loops has been performed
done < "$_file"
Plik wczytywany do skryptu ma następującą postać:
1 2 3 4
5 6 7 8
...
Jednak po uruchomieniu programu zapętla on tylko pierwszy zestaw danych wejściowych (w tym przykładzie 1 2 3 4) i kończy się bez uruchamiania programów dla różnych innych zestawów danych wejściowych.
shell-script
shell
JasKa071
źródło
źródło
Odpowiedzi:
Kod powłoki wygląda OK, a uproszczona wersja tekstowa działa zgodnie z oczekiwaniami:
Wynik:
Dlatego komentarz steeldrivera jest prawdopodobnie poprawny i albo
mpiexec
jeden zpython
programów zużywa pozostałe linie wejściowe, abyecho
nigdy nie dostać się do drugiej linii wejściowej.Jako przykład rozważ powyższy kod z dodanym jeszcze jednym głodnym zestawem poleceń:
Dane wyjściowe (zwróć uwagę na brakujące linie):
źródło