在剪辑中,以下代码有效:
(defun hit-history () (shell "tail ssqHitNum.txt"))
但是,在Clozure CL中,不支持shell
功能!
不,没有标准方法,但是有一些库为重要的实现提供了此功能。例如,Quicklisp中提供了一个琐碎的外壳,提供了shell-command
。 (我实际上没有测试它,但是它在recommended libraries的CLiki中。)还有一个外部程序。更新:[E0]似乎最近更喜欢inferior-shell,因为Ehvince在评论和他自己的答案中指出。
您还可以使用读取条件,使不同的实现使用各自的功能来执行此操作。
例如,CCL具有ccl:run-program
:
CL-USER> (run-program "whoami" '() :output *standard-output*)
foobar
#<EXTERNAL-PROCESS (whoami)[NIL] (EXITED : 0) #xC695EA6>
是的,[DF]是ASDF的一部分,应包括在所有现代实现中。
uiop:run-program
例如,]
uiop:launch-program
或
(uiop:run-program (list "firefox" "http:url") :output t)
您可以在其中发送输入和读取输出的位置。
这里有更多说明:[(defparameter *shell* (uiop:launch-program "bash" :input :stream :output :stream))
https://lispcookbook.github.io/cl-cookbook/os.html#running-external-programs已过时,并被trivial-shell
取代,inferior-shell在内部使用便携式uiop的run-program
(同步),因此我们可以使用它。
(defun dot->png (fname thunk)
(with-open-file (*standard-output*
fname
:direction :output
:if-exists :superseded)
(funcall thunk))
(ccl:run-program "dot" (list "-Tpng -O" fname))
)
下面显示了从通用Lisp中调用wget的示例:
看看inferior-shell
包装。
CL21定义简单方法: