Run multiple commands at once in the same terminal

bash, linux

Solution

This bash script is for N parallel threads. Each argument is a command.

`trap` will kill all subprocesses when SIGINT is catched. `wait $PID_LIST` is waiting each process to complete. When all processes have completed, the program exits.

#!/bin/bash

for cmd in "$@"; do {
  echo "Process \"$cmd\" started";
  $cmd & pid=$!
  PID_LIST+=" $pid";
} done

trap "kill $PID_LIST" SIGINT

echo "Parallel processes have started";

wait $PID_LIST

echo
echo "All processes have completed";

Save this script as `parallel_commands` and make it executable. This is how to use this script:

parallel_commands "cmd arg0 arg1 arg2" "other_cmd arg0 arg2 arg3"

Example:

parallel_commands "sleep 1" "sleep 2" "sleep 3" "sleep 4"

Start 4 parallel sleep and waits until "sleep 4" finishes.

Problem

I want to run a few commands, each of which doesn't quit until Ctrl+C is pressed. Is there something I can run to run all of them at once, and Ctrl+C will quit them all? They can share the terminal output. Specifically, I have the compass compiler, coffeescript compiler, and a custom command that watches for file changes all running watching for file changes. I don't want to load up a terminal for each command.

Original source