Jak zaprogramować wiersz poleceń Linuksa, aby uruchamiał fragment kodu wiele razy?

1

Tak więc zwykle piszę / znajduję generator przypadków testowych dla każdego kodu, który piszę. Ten typ kodu generalnie prowadzi do niektórych plików wyjściowych. Mówiąc dokładniej, próbuję wygenerować wiele różnych plików do przetestowania mojego kodu.

Powiedzmy, że polecenie wygląda następująco:

java test <parameters/> > <output filename/>

Czy istnieje sposób na zautomatyzowanie tego dla wielu różnych wartości parametrów i generowania wielu różnych plików?

Próbowałem:

for i in seq `0 3`; do java test $i > $i.txt; done

Nie mogłem użyć $ i w nazwie pliku, a bez niego polecenie nie dało mi żadnych błędów, ale nie zrobiło też nic innego. Wiem, że linia poleceń Uniksa jest bardzo potężna i mam wrażenie, że powinno to być możliwe, ale po prostu nie wiem, jak to zrobić.

Wydajność Issliss
źródło

Odpowiedzi:

5

Jeśli używasz Bash, nie ma powodu, aby używać seq. Ponadto zaleca się stosowanie $()zamiast backticks (ale nie są one również potrzebne, jeśli używasz jednej z tych form).

for i in {0..3}; do java test $i > "$i.txt"; done

lub

for ((i=0;i<=3;i++)); do java test $i > "$i.txt"; done
Dennis Williamson
źródło
2

Zakładając, że jesteś w powłoce bash, po prostu przenieś seqpolecenie do backticks:

dla i w `seq 0 3`; wykonaj test java $ i> $ i.txt; gotowy
John T.
źródło
Twoje rozwiązanie również działa, ale mogę wybrać tylko jedną poprawną odpowiedź.
Wydajność
1

Powiedziałbym, że spraw, aby Twoja aplikacja czytała standard i spawnowała nowe wątki, będzie bardziej wydajna.

I jeszcze jedna pętla:

seq 0 3 | while read i; do java test $i > "$i.txt"; done
OneOfOne
źródło