Я пишу служебную программу в Common Lisp и строю ее с помощью Clozure CL; Я хотел бы иметь возможность использовать опцию командной строки -d
с программой, но по какой-то причине этот конкретный вариант не пропустит до (ccl::command-line-arguments)
. Вот минимальный пример:Clozure CL скомпилировал исполняемый файл, потеряв некоторые аргументы командной строки
(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 конкретных (а не, скажем, оболочка есть их), потому что другие вещи, кажется, становится все аргументы:
#!/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 "[email protected]"
дает
~/dev/scratch$ ./opts.sh -a -b -c -d -e
-a -b -c -d -e
Это все происходит на lubuntu 15.10 с bash
в качестве оболочки.
Если кто-нибудь может пролить свет на то, почему это происходит, или как я могу закончить все мои ключи командной строки, я был бы признателен.
Спасибо.
Обратите внимание, что вы можете получить более конкретную помощь из списка рассылки Clozure CL: https://lists.clozure.com/mailman/ listinfo/openmcl-devel –
Проблема не ограничивается приложениями, сохраненными с помощью SAVE-APPLICATION. Если вы запустите CCL и дадите флагов '-b' или' -d', они не будут отображаться в 'CCL :: COMMAND-LINE-ARGUMENTS' (отображаются другие флаги и аргументы). Кроме того, если вы укажете флаг, который не существует (например, '-a'), он не запустится и просто покажет справочное сообщение, но' -d' не приведет к тому, что это произойдет. Это заставляет меня полагать, что CCL, вероятно, использует его для чего-то (может быть, сокращение для '--debug'?), Хотя оно не упоминается в документах. – jkiiski