(defun command-output (control-string &rest args)
"Interpolate ARGS into CONTROL-STRING as if by FORMAT, and
-synchronously execute the result using a Bourne-compatible shell,
+synchronously execute the result using a Bourne-compatible shell,
returns (VALUES string-output error-output exit-status)"
(let ((command (apply #'format nil control-string args)))
#+sbcl
- (let* ((process (sb-ext:run-program
+ (let* ((process (sb-ext:run-program
"/bin/sh"
(list "-c" command)
:input nil :output :stream :error :stream))
(values
output
error
- (sb-impl::process-exit-code process)))
+ (sb-impl::process-exit-code process)))
+
-
#+(or cmu scl)
- (let* ((process (ext:run-program
+ (let* ((process (ext:run-program
"/bin/sh"
(list "-c" command)
:input nil :output :stream :error :stream))
(multiple-value-bind (output error status)
(excl.osi:command-output command :whole t)
(values output error status))
-
+
#+lispworks
;; BUG: Lispworks combines output and error streams
(let ((output (make-string-output-stream)))
(unwind-protect
- (let ((status
+ (let ((status
(system:call-system-showing-output
command
:prefix ""
:output-stream output)))
(values (get-output-stream-string output) nil status))
(close output)))
-
- #+clisp
+
+ #+clisp
;; BUG: CLisp doesn't allow output to user-specified stream
(values
nil
nil
(ext:run-shell-command command :output :terminal :wait t))
-
+
#+openmcl
- (let* ((process (ccl:run-program
+ (let* ((process (ccl:run-program
"/bin/sh"
(list "-c" command)
:input nil :output :stream :error :stream
(values output
error
(nth-value 1 (ccl::external-process-status process))))
-
+
#-(or openmcl clisp lispworks allegro scl cmu sbcl)
(error "COMMAND-OUTPUT not implemented for this Lisp")
(defun run-shell-command (control-string &rest args)
"Interpolate ARGS into CONTROL-STRING as if by FORMAT, and
-synchronously execute the result using a Bourne-compatible shell,
+synchronously execute the result using a Bourne-compatible shell,
returns (VALUES output-string pid)"
(let ((command (apply #'format nil control-string args)))
#+sbcl
(sb-impl::process-exit-code
- (sb-ext:run-program
+ (sb-ext:run-program
"/bin/sh"
(list "-c" command)
:input nil :output nil))
-
+
#+(or cmu scl)
(ext:process-exit-code
- (ext:run-program
+ (ext:run-program
"/bin/sh"
(list "-c" command)
:input nil :output nil))
-
-
+
+
#+allegro
(excl:run-shell-command command :input nil :output nil
:wait t)
:show-cmd nil
:prefix ""
:output-stream nil)
-
+
#+clisp ;XXX not exactly *verbose-out*, I know
(ext:run-shell-command command :output :terminal :wait t)
-
+
#+openmcl
(nth-value 1
(ccl:external-process-status
(ccl:run-program "/bin/sh" (list "-c" command)
:input nil :output nil
:wait t)))
-
+
#-(or openmcl clisp lispworks allegro scl cmu sbcl)
(error "RUN-SHELL-PROGRAM not implemented for this Lisp")
#+(and lispworks (not win32)) (system::getpid)
#+sbcl (sb-posix:getpid)
#+cmu (unix:unix-getpid)
- #+openmcl (ccl:getpid)
- #+(and clisp unix) (system::program-id)
+ #+openmcl (ccl::getpid)
+ #+(and clisp unix) (system::process-id)
#+(and clisp win32) (cond ((find-package :win32)
- (funcall (find-symbol "GetCurrentProcessId"
+ (funcall (find-symbol "GetCurrentProcessId"
:win32)))
(t
(system::getenv "PID")))