1

So, I usually write/find a test case generator for any code that I write. This type of code generally leads to some file output. To be thorough, I try and generate many different files to test my code on.

Say the command is like this:

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

Is there a way to automate this for many different values of the parameters and generate many different files?

I tried:

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

I wasn't able to use the $i in the filename, and without it the command gave me no errors, but did nothing else either. I know the Unix command line is very powerful, and I have a feeling that this should be possible, but I just don't know how to do it.

studiohack
  • 13,437
  • 19
  • 85
  • 117
efficiencyIsBliss
  • 2,249
  • 4
  • 20
  • 14

3 Answers3

5

If you're using Bash, there's no reason to use seq. Also, it's recommended that you use $() instead of backticks (but they're not needed either if you're using one of these forms).

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

or

for ((i=0;i<=3;i++)); do java test $i > "$i.txt"; done
Dennis Williamson
  • 102,367
  • 18
  • 163
  • 186
2

Assuming you are in the bash shell, just move the seq command into the backticks:

for i in `seq 0 3`; do java test $i > $i.txt; done
John T
  • 160,571
  • 27
  • 336
  • 345
1

I would say make your app read stdin and spawn new threads, will be more efficient.

And yet another loop :

seq 0 3 | while read i; do java test $i > "$i.txt"; done
OneOfOne
  • 947
  • 6
  • 13