如何避免在Common Lisp中完成脚本?

mga*_*aia 1 lisp common-lisp

我正在尝试学习Common Lisp,并找到了一个简单的webserver示例:

#!/usr/local/bin/sbcl --script
;;; The following lines added by ql:add-to-init-file:
#-quicklisp
(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp"
                                       (user-homedir-pathname))))
  (when (probe-file quicklisp-init)
    (load quicklisp-init)))

(ql:quickload "cl-who")
(ql:quickload "hunchentoot")
(ql:quickload "parenscript")

(defpackage :vote
             (:use :cl :cl-who :hunchentoot :parenscript))

(in-package :vote)

(hunchentoot:start (make-instance 'hunchentoot:easy-acceptor :port 8080))

(hunchentoot:define-easy-handler (say-yo :uri "/yo") (name)
  (setf (hunchentoot:content-type*) "text/plain")
  (format nil "Hey~@[ ~A~]!" name))
Run Code Online (Sandbox Code Playgroud)

我正在运行它,--script所以我可以迭代代码并继续测试它.

问题是 - 脚本在启动服务器后立即完成,所以我无法测试它.

我怎么能让程序继续运行直到我CTRL+D/ CTRL+C它?

可以使用类似loopsleep,但它是太麻烦了-即,积极的等待.

Jos*_*lor 5

如果您愿意使用Ctrl-D,可以使用--load而不是--script来加载文件.加载文件后,您将被放入REPL,您可以Ctrl-D从中退出.

虽然这可能是可行的,但考虑具有可在命令行上覆盖的默认参数的计时器也是有意义的,以便系统在一些到期时间后关闭.否则,您可能会无意中让Web服务器运行.