If CL_LAUNCH_FILE is unset, assume that we've been invoked with the
program name as the first argument anyway. We can arrange for this to
be the case fairly easily.
The problem is that
#! /usr/bin/cl-launch -X ... --
doesn't work on Linux because cl-launch is a script. Besides, it
hard-codes the path of cl-launch. Putting
#! /bin/sh
#|
exec cl-launch -f "$0" -- "$0" "$@"
|#
... lisp here ...
seems sufficient for one-off Lisp scripts.
(defun set-command-line-arguments ()
(setf *raw-command-line*
(or (when (member :cl-launched *features*)
- (cons (or (funcall (intern "GETENV" (find-package :cl-launch))
- "CL_LAUNCH_FILE")
- "<unknown-script>")
- (symbol-value (intern "*ARGUMENTS*"
- (find-package :cl-launch)))))
+ (let* ((cll-package (find-package :cl-launch))
+ (name (funcall (intern "GETENV" cll-package)
+ "CL_LAUNCH_FILE"))
+ (args (symbol-value (intern "*ARGUMENTS*"
+ cll-package))))
+ (if name
+ (cons name args)
+ args)))
#+cmu ext:*command-line-strings*
#+sbcl sb-ext:*posix-argv*
#+ecl (loop from i below (ext:argc) collect (ext:argv i))