質問

Common Lisp(違いがある場合は具体的にはGNU)でコマンドライン引数を取得するにはどうすればよいですか?

役に立ちましたか?

解決

CLispでスクリプトを作成していると仮定しています。を含むファイルを作成できます

#! /usr/local/bin/clisp
(format t "~&~S~&" *args*)

実行して実行可能にします

$ chmod 755 <filename>

実行すると次のようになります

$ ./<filename>
NIL
$ ./<filename> a b c
("a" "b" "c")
$ ./<filename> "a b c" 1 2 3
("a b c" "1" "2" "3")

他のヒント

http://cl-cookbook.sourceforge.net/os.html はいくつかの洞察

  (defun my-command-line ()
  (or 
   #+CLISP *args*
   #+SBCL *posix-argv*  
   #+LISPWORKS system:*line-arguments-list*
   #+CMU extensions:*command-line-words*
   nil))

はあなたが探しているものだと思います。

ClispまたはGCLについて話しているのですか? GCLでは、コマンドライン引数が si :: * command-args * で渡されるようです。

SBCLでは、sb-ext:* posix-argv *を使用して、一般的なLispスクリプトからargvを取得できます。 sb-ext:* posix-argv *はすべての引数を保持するリストです。最初の引数はスクリプトfilnameです。

各実装のメカニズムを抽象化する前述のClonライブラリがあり、現在はより簡単な unix-opts 、およびクックブックのチュートリアル

(ql:quickload "unix-opts")

(opts:define-opts
    (:name :help
       :description "print this help text"
       :short #\h
       :long "help")
    (:name :nb
       :description "here we want a number argument"
       :short #\n
       :long "nb"
       :arg-parser #'parse-integer) ;; <- takes an argument
    (:name :info
       :description "info"
       :short #\i
       :long "info"))

その後、実際の解析は(opts:get-opts)で行われ、2つの値が返されます:オプションと残りの自由な引数。

https://stackoverflow.com/a/1021843/31615 で見られるように、各実装には独自のメカニズムがあります。これに対処する通常の方法は、統一されたインターフェースを提供するラッパーライブラリを使用することです。

このようなライブラリは、物を読み込むだけでなく、それらを変換し、ユーザーに役立つ出力を提供するためのさらなる支援を提供できます。完全なパッケージはCLON(CLONまたはCLONと混同しないでください、申し訳ありません)、コマンドラインオプションNuker 。詳細なドキュメントもあります。ただし、たとえば command-line-arguments および apply-argv

これらのquicklispのパッケージは、それぞれ net.didierverna.clon command-line-arguments 、および apply-argv という名前です。 。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top