2009-06-20 26 views

Respuesta

16

Supongo que está scripting con CLisp. Se puede crear un archivo que contiene

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

hacerlo ejecutable mediante la ejecución de

$ chmod 755 <filename> 

Correr da

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

el enlace en esta publicación ya no es viable. :( – masukomi

+0

esto es súper genial, pero ¿cómo puedo hacer los datos de las cadenas? Mi función se utiliza para entradas como esta (única '(abccdddef)) y no funciona con cadenas: O .. traté de (mapcar # 'make-symbol * args *) pero eso no parece hacer el trabajo –

24

http://cl-cookbook.sourceforge.net/os.html proporciona una cierta penetración

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

es lo que busca, creo.

+0

(o FOO nil) es equivalente a FOO, ¿no es así? –

+1

Sí, pero cuando tienes tu FOO condicionalmente leído, es posible que tengas un retroceso. Pero, entonces, el valor de (o) es, no del todo sorprendente, NIL (así como el valor de (y) es T). – Vatine

4

¿Estás hablando de Clisp o GCL? Parece que en GCL los argumentos de línea de comando se pasan en si::*command-args*.

2

En SBCL, podemos usar sb-ext: * posix-argv * para obtener el argv del script de lisp común. El sb-ext: * posix-argv * es una lista que contiene todos los argumentos, el primer arg es el nombre de archivo del script.

+0

No estoy seguro de que esto funcione más. Aparece el mensaje de error' Símbolo 'POSIX-ARGV' no encontrado en el paquete SB-EXT. ' – Langston

+0

debería ser sb-ext: * posix-argv *, en el texto anterior, el \ * algo \ * funcionaba como un estilo. Lo siento. –

1

Como se ve en https://stackoverflow.com/a/1021843/31615, cada implementación tiene su propio mecanismo. La forma habitual de tratar esto es utilizar una biblioteca contenedora que presente una interfaz unificada para usted.

Dicha biblioteca puede proporcionar más ayuda no solo para leer cosas, sino también para convertirlas y proporcionar resultados útiles para el usuario. Un paquete bastante completo es CLON (no debe confundirse con CLON o CLON, lo siento), el Command Line Options Nuker, que también trae una amplia documentación. Hay otros, sin embargo, si sus necesidades son más livianas, por ejemplo, command-line-arguments y apply-argv.

Los paquetes en quicklisp para estos se denominan net.didierverna.clon, command-line-arguments y apply-argv, respectivamente.