         return self.command.joined(separator: " ")
     }
 }
+
+private extension ShellCommand {
+    func startExecution() {
+        var commands = [ShellCommand]()
+        var command: ShellCommand? = self
+        repeat {
+            commands.append(command!)
+            command = command!.parentCommand
+        } while command != nil
+
+        for command in commands {
+            command.process.launch()
+        }
+    }
+}
 #endif

        }
    }

    public convenience init(_ command: [String], captureOutput: Bool = true) {
        self.init(command, parentCommand: nil, captureOutput: captureOutput)
    }

    private let command: [String]

    #if os(Linux)
        fileprivate let process = Task()
    #else
        fileprivate let process = Process()
    #endif

    fileprivate let parentCommand: ShellCommand?

    private init(_ command: [String], parentCommand: ShellCommand?, captureOutput: Bool) {
        self.command = command
