Hier ist ein Beispiel für die Verwendung des with-command-line
Makros. Der folgende Code gibt eine triviale Klasse mit einer Hauptmethode an, die nichts anderes tut, als die Werte ihrer Befehlszeilenargumente auszudrucken.
(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)))
Kompilieren Sie die Klasse in der REPL:
user> (compile 'cmd-line-demo)
cmd-line-demo
Anwendungsbeispiel
1) Wenn Sie keine Befehlszeilenargumente ausführen, werden die Hilfeinformationen angezeigt. Die Hilfeinformationen können auch mit --help
oder -h
Flags angezeigt werden. Beachten Sie, dass die Hilfeinformationen automatisch aus Ihrer cmdspec generiert werden.
$ 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) Nicht angegebene Argumente erhalten den in der cmdspec-Bindung angegebenen Standardwert. Hat beispielsweise bar
einen Standardwert von 2
.
$ java -classpath . cmd_line_demo --foo "changed value"
foo: changed value
bar: 2
boolean?: nil
remaining: []
3) Boolesche Flags werden mit dem Suffix "?" in der cmdspec. Beachten Sie, dass die Flagge selbst nicht nicht enthalten das „?“ als Teil seines Namens.
$ java -classpath . cmd_line_demo -boolean
foo: 1
bar: 2
boolean?: true
remaining: []
4) Beachten Sie auch, dass Sie Flag-Aliase angeben können, indem Sie mehrere Symbole in der cmdspec angeben. Ich habe das mit den boolean?
und b?
Flags gemacht.
5) Schließlich habe ich angegeben, dass remaining
alle verbleibenden Argumente ohne zugehörige Flags erfasst werden.
$ java -classpath . cmd_line_demo -foo test file1 file2 file3
foo: test
bar: 2
boolean?: nil
remaining: [file1 file2 file3]