diff --git a/run.lisp b/run.lisp
index efc92de4f05dda0fbf0a5bb82a4cae4e21070f42..2b1c3a0e8ab07270bbcd80b3248eca1c4dffe794 100644
--- a/run.lisp
+++ b/run.lisp
@@ -28,26 +28,42 @@
       spec
       `(ssh ,host ,(print-process-spec spec))))
 
+(deftype direct-command-spec ()
+  '(and command-spec (satisfies direct-command-spec-p)))
+
+(defun direct-command-spec-p (spec)
+  (and (typep spec 'command-spec)
+       (null (command-redirections spec))))
+
 (defun run-spec (spec &key ignore-error-status output)
-  (let ((command
-         (if (and (typep spec 'command-spec)
-                  (null (command-redirections spec)))
-             (command-arguments spec)
-             (print-process-spec spec))))
-    (if (eq output t)
-        (run-program/ command :ignore-error-status ignore-error-status)
-        (run-program/ command
-                      :ignore-error-status ignore-error-status
-                      :output output))))
+  (let* ((command
+          (if (consp spec)
+            (parse-process-spec spec)
+            spec))
+         (command
+          (etypecase command
+            (direct-command-spec
+             (command-arguments spec))
+            (process-spec
+             (print-process-spec spec))
+            (string
+             spec))))
+    (case output
+      ((t)
+       (run-program/ command :ignore-error-status ignore-error-status))
+      ((:interactively)
+       (run-program/interactively
+        command :ignore-error-status ignore-error-status))
+      (otherwise
+       (run-program/
+        command :ignore-error-status ignore-error-status :output output)))))
 
 (defun run-process-spec (spec &rest keys &key ignore-error-status output host backend)
   (etypecase host
     (null
      (etypecase spec
        (string
-        (if (eq output t)
-            (run-program/ spec :ignore-error-status ignore-error-status)
-            (apply 'run-program/ spec keys)))
+        (run-spec spec :ignore-error-status ignore-error-status :output output))
        (cons
         (apply 'run-process-spec (parse-process-spec spec) keys))
        (process-spec