欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

在多种不同的 Common Lisp 实现(CLISP、CCL、SBCL)中执行 shell 命令的功能

最编程 2024-05-05 11:19:35
...
开源中国社区团队直播首秀,以分享为名讲述开源中国社区背后的故事”

开始只知道 CLISP 中的是:

 (ext:shell …)

然后查了一下,发现又多了解了两种,CCL 和 SBCL 分别有两个函数是:

(run-program …)

(sb-ext:run-program …)

接着继续查,发现有人写出这个很不错的函数,包含了好几种用法:

(defun sh (cmd)
    #+clisp
        (let ((str (ext:run-shell-command cmd :output:stream)))
            (loop for line = (read-line str nil)
             until (null line)
             do (print line)))
    #+ecl 
        (si:system cmd)
    #+sbcl 
        (sb-ext:run-program "/bin/sh" (list "-c" cmd) :input nil :output *standard-output*)
    #+clozure 
        (ccl:run-program "/bin/sh" (list "-c" cmd) :input nil :output *standard-output*)))

实际举个例子,就以 CCL 为例好了:

CL-USER> (ccl:run-program "/bin/sh" (list "-c" "echo 123") :input nil :output *standard-output*)
123
#<EXTERNAL-PROCESS (/bin/sh -c echo 123)[2596] (EXITED : 0) #x30200197619D>
CL-USER>


推荐阅读