Вот пример использования макроса with-command-line
. В следующем коде указан тривиальный класс с методом main, который ничего не делает, кроме вывода значений аргументов командной строки.
(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)))
Скомпилируйте класс в REPL:
user> (compile 'cmd-line-demo)
cmd-line-demo
Пример использования
1) Выполнение без аргументов командной строки приведет к отображению справочной информации. Справочная информация также может отображаться с флагами --help
или -h
. Обратите внимание, что справочная информация автоматически генерируется из вашей 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) Неуказанные аргументы получают значение по умолчанию, указанное в привязке cmdspec. Например, bar
имеет значение по умолчанию 2
.
$ java -classpath . cmd_line_demo --foo "changed value"
foo: changed value
bar: 2
boolean?: nil
remaining: []
3) Булевы флаги обозначаются суффиксом "?" в спецификации Обратите внимание, что сам флаг не включает "?" как часть его имени.
$ java -classpath . cmd_line_demo -boolean
foo: 1
bar: 2
boolean?: true
remaining: []
4) Также обратите внимание, что вы можете указать псевдонимы флагов, указав несколько символов в cmdspec. Я сделал это с флагами boolean?
и b?
.
5) Наконец, я указал, что remaining
захватывает все оставшиеся аргументы без связанных флагов.
$ java -classpath . cmd_line_demo -foo test file1 file2 file3
foo: test
bar: 2
boolean?: nil
remaining: [file1 file2 file3]