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ć.

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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.