Search code examples
shellexeccommon-lispccl

Does there exist standard way to run external program in Common Lisp?


In clisp, the following code works:

(defun hit-history () (shell "tail ssqHitNum.txt"))

However, in Clozure CL, the shell function is not supported!


Solution

  • No, there is no standard way, but there are libraries which provide this functionality for the important implementations. For example, there's trivial-shell available in Quicklisp, which provides shell-command. (I didn't actually test it, but its among the recommended libraries on CLiki.) There is also external-program. Update: inferior-shell seems to be prefered these days, as Ehvince points out in a comment and his own answer.

    You could also use read-time conditionals to make different implementations use their respective functionality to do this.

    CCL has ccl:run-program, for example:

    CL-USER> (run-program "whoami" '() :output *standard-output*)
    foobar
    #<EXTERNAL-PROCESS (whoami)[NIL] (EXITED : 0) #xC695EA6>