Use sub-shell for each command
diff --git a/ninja.go b/ninja.go
index f982a59..57b6573 100644
--- a/ninja.go
+++ b/ninja.go
@@ -132,10 +132,22 @@
 		if cmd == "" {
 			cmd = "true"
 		}
+
+		needsSubShell := i > 0 || len(runners) > 1
+		if cmd[0] == '(' {
+			needsSubShell = false
+		}
+
+		if needsSubShell {
+			buf.WriteByte('(')
+		}
 		buf.WriteString(cmd)
 		if i == len(runners)-1 && r.ignoreError {
 			buf.WriteString(" ; true")
 		}
+		if needsSubShell {
+			buf.WriteByte(')')
+		}
 	}
 	return buf.String()
 }