A continuación, se muestra un ejemplo del uso de su with-command-line
macro. El siguiente código especifica una clase trivial con un método principal que no hace más que imprimir los valores de sus argumentos de línea de comando.
(ns cmd-line-demo
(:gen-class)
(:use clojure.contrib.command-line))
(defn -main [& args]
(with-command-line args
"Command line demo"
[[foo "This is the description for foo" 1]
[bar "This is the description for bar" 2]
[boolean? b? "This is a boolean flag."]
remaining]
(println "foo: " foo)
(println "bar: " bar)
(println "boolean?: " boolean?)
(println "remaining: " remaining)))
Compile la clase en el REPL:
user> (compile 'cmd-line-demo)
cmd-line-demo
Uso de ejemplo
1) La ejecución sin argumentos de línea de comando hará que se muestre la información de ayuda. La información de ayuda también se puede mostrar con banderas --help
o -h
. Tenga en cuenta que la información de ayuda se genera automáticamente desde su cmdspec.
$ java -classpath . cmd_line_demo
Command line demo
Options
--foo <arg> This is the description for foo [default 1]
--bar <arg> This is the description for bar [default 2]
--boolean, -b This is a boolean flag.
2) Los argumentos no especificados reciben el valor predeterminado como se especifica en el enlace cmdspec. Por ejemplo, bar
tiene un valor predeterminado de 2
.
$ java -classpath . cmd_line_demo --foo "changed value"
foo: changed value
bar: 2
boolean?: nil
remaining: []
3) Las banderas booleanas se indican con el sufijo "?" en el cmdspec. Tenga en cuenta que la bandera en sí no incluye el "?" como parte de su nombre.
$ java -classpath . cmd_line_demo -boolean
foo: 1
bar: 2
boolean?: true
remaining: []
4) También tenga en cuenta que puede especificar alias de bandera especificando varios símbolos en cmdspec. He hecho esto con las banderas boolean?
y b?
.
5) Finalmente, he especificado que remaining
capture todos los argumentos restantes sin indicadores asociados.
$ java -classpath . cmd_line_demo -foo test file1 file2 file3
foo: test
bar: 2
boolean?: nil
remaining: [file1 file2 file3]