<p>I'm trying to run some commands in paralel, in background, using bash. Here's what I'm trying to do:</p>

<pre><code>forloop {
  //this part is actually written in perl
  //call command sequence
  print `touch .file1.lock; cp bigfile1 /destination; rm .file1.lock;`;
}
</code></pre>

<p>The part between backticks (``) spawns a new shell and executes the commands in succession. The thing is, control to the original program returns only after the last command has been executed. I would like to execute the whole statement in background (I'm not expecting any output/return values) and I would like the loop to continue running.</p>

<p>The calling program (the one that has the loop) would not end until all the spawned shells finish.</p>

<p>I could use threads in perl to spawn different threads which call different shells, but it seems an overkill...</p>

<p>Can I start a shell, give it a set of commands and tell it to go to the background?</p>

```
```
for command in $commands
do
    "$command" &
done
wait
```
```
The ampersand at the end of the command runs it in the background, and the
```
wait
```
waits until the background task is completed.