gpt4 book ai didi

common-lisp - Clozure CL 编译的可执行文件丢失某些命令行参数

转载 作者:行者123 更新时间:2023-12-02 01:26:43 24 4
gpt4 key购买 nike

我正在用 Common Lisp 编写实用程序并使用 Clozure CL 构建它;我希望能够在程序中使用命令行选项 -d,但由于某些原因 this 特定选项无法通过 (ccl::command-line-arguments)。这是一个最小的例子:

(defun main ()
(format t "~s~%" (ccl::command-line-arguments))
(quit))

我编译了

(save-application "opts"
:toplevel-function 'main
:prepend-kernel t)

这是一些示例输出:

~/dev/scratch$ ./opts -c -a -e
("./opts" "-c" "-a" "-e")
~/dev/scratch$ ./opts -c -d -e
("./opts" "-c" "-e")
~/dev/scratch$ ./opts -b --frogs -c -d -e -f -g -h --eye --jay -k -l
("./opts" "--frogs" "-c" "-e" "-f" "-g" "-h" "--eye" "--jay" "-k" "-l")

-b-d 选项似乎丢失了。关于 command line arguments 的文档对于 ccl 不是很有帮助。我想也许是因为 ccl 本身将 -b 作为参数,该选项可能由于某种原因被吃掉了,但它没有使用 -d(吃掉),它确实需要 -e-l 而不是。 saving applications 上没有任何内容似乎很有帮助。

我很确定它是特定于 Clozure 的(而不是,比如说,吃掉它们的 shell),因为其他东西似乎得到了所有论点:

#!/usr/bin/python
import sys
print sys.argv

产量

~/dev/scratch$ ./opts.py -a -b -c -d -e
['./opts.py', '-a', '-b', '-c', '-d', '-e']

#!/bin/bash
echo "$@"

给予

~/dev/scratch$ ./opts.sh -a -b -c -d -e
-a -b -c -d -e

这一切都发生在 lubuntu 15.10 上,以 bash 作为 shell。

如果有人能阐明为什么会发生这种情况,或者我如何结束所有命令行开关,我将不胜感激。

谢谢。

最佳答案

根据1.11版本的源代码,-b-d是lisp内核使用的选项。

由于我不确定许可证问题,我只提供相关文件的链接:http://svn.clozure.com/publicsvn/openmcl/release/1.11/source/lisp-kernel/pmcl-kernel.c

命令行参数在函数 process_options 中处理,其中选项 -b (--batch) 和 -d (--debug) - 除其他外 - 变量 num_elide 设置为 1。再往下一点,这会导致用以下参数覆盖选项(argv[k] = argv[j];).

该代码还显示了一个可能的修复方法:在 -b-d 之前提供一次 --(两个破折号)作为参数。当上述函数遇到 -- 时,它会停止处理其余参数,从而使它们保持不变,以便可能在不久之后被纳入“lisp 世界”。


原来这已经在 SO 之前解决了: https://stackoverflow.com/a/5522169/1116364

关于common-lisp - Clozure CL 编译的可执行文件丢失某些命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36749146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com