title: Executing a Bash Script from Golang
body: <p>I am trying to figure out a way to execute a script (.sh) file from Golang. I have found a couple of easy ways to execute commands (e.g. os/exec), but what I am looking to do is to execute an entire sh file (the file sets variables etc.).</p>
  
  <p>Using the standard os/exec method for this does not seem to be straightforward: both trying to input "./script.sh" and loading the content of the script into a string do not work as arguments for the exec function. </p>
  
  <p>for example, this is an sh file that I want to execute from Go:</p>
  
  <pre><code>OIFS=$IFS;
  IFS=",";
  
  # fill in your details here
  dbname=testDB
  host=localhost:27017
  collection=testCollection
  exportTo=../csv/
  
  # get comma separated list of keys. do this by peeking into the first document in the collection and get his set of keys
  keys=`mongo "$host/$dbname" --eval "rs.slaveOk();var keys = []; for(var key in db.$collection.find().sort({_id: -1}).limit(1)[0]) { keys.push(key); }; keys;" --quiet`;
  # now use mongoexport with the set of keys to export the collection to csv
  mongoexport --host $host -d $dbname -c $collection --fields "$keys" --csv --out $exportTo$dbname.$collection.csv;
  
  IFS=$OIFS;
  </code></pre>
  
  <p>from the Go program:</p>
  
  <pre><code>out, err := exec.Command(mongoToCsvSH).Output()
      if err != nil {
          log.Fatal(err)
      }
      fmt.Printf("output is %s\n", out)
  </code></pre>
  
  <p>where mongoToCsvSH can be either the path to the sh or the actual content - both do not work.</p>
  
  <p>Any ideas how to achieve this? </p>