title: Using Bash to automate creation of test outputs
body: <p>I have a java program that I am trying to generate 3 outputs for, and then rename them depending on what the input file was originally called.</p>
  
  <p>The problem is that only the input file is being moved. I think this might be an issue regarding relative file commands.</p>
  
  <p>Here is my script. (Also, I'm open to suggestions on making this script better looking. I'm a bash newbie.)</p>
  
  <pre><code>#!/bin/bash
  ########################################################
  #This script compiles Main, then attempts to run each  #
  #test case. After running a test case, it renames the  #
  #testcase and moves it to a new directory.             #
  ########################################################
  #echo `pwd`    &lt;---- This was used for testing. pwd is correct
  
  #Gets contents of "tests" directory, stores them into the array
  #without the file extension.
  list=(`ls tests| sed 's/\.txt$//g'`)
  
  #Compiles Main.java
  cd ./src
  javac Main.java
  cd '../'
  mv -f src/*.class bin #*/ (formatting fix)
  
  #Runs Main for each test case, then renames and moves the test cases.
  for filename in ${list[@]}
  do
  echo 1 &gt; input.txt
  echo tests/$filename.txt &gt;&gt; input.txt
  cd ./bin # Why do I need to cd to make this work?
  java bin/Main &lt; input.txt
  cd ../
  mv -f input.txt "scriptout/'$filename'_input.txt"
  mv -f "tests/output.txt" "scriptout/'$filename'_output.txt"
  mv -f "tests/listing.txt" "scriptout/'$filename'_listing.txt"
  mv -f "src/intermediate.txt" "scriptout/'$filename'_intermediate.txt"
  done
  </code></pre>