https://github.com/sebastien/multiplex
Here are some example commands that will help understand the syntax:
Running multiple commands in parallel:
multiplex "python -m http.server -p 8000" "python -m http.server -p 8001"
Running a command after 5s delay:
multiplex "+5=python -m http.server"
Running a command after another completes:
multiplex "A=find . -name '*.*'" "B:A=du -hs ."
Running multiple commands with complex coordination:
# Starts the DB, wait two seconds after it started, run the server, and
# once the server is started, start the test. When the test ends,
# gracefully shut down everything.
multiplex "DB=mongod" "API:DB&+2=node server.js" ":API&|end=npm test"