File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ #+TITLE: Скрипты на Clojure, Babashka runtime
2+
3+ #+begin_quote
4+ Познакомимся с проектом babashka для написания скриптов на Clojure;
5+ Научимся создавать command line interface для своих скриптов,
6+ автоматизировать рутинные задачи с использованием babashka tasks.
7+ #+end_quote
8+
9+ * [[https://babashka.org/][Babashka]]
10+
11+ Диалект Clojure, имеющий [[https://github.com/babashka/babashka#differences-with-clojure][некоторые отличия]] от оригинала.
12+
13+ ** Основы
14+
15+ #+BEGIN_SRC shell :results verbatim
16+
17+ echo "Hello" | bb -e '(str *input* ", World!")'
18+
19+ bb '(+ 1 2 3)'
20+
21+ #+END_SRC
22+
23+ #+BEGIN_SRC shell :results verbatim
24+
25+ echo "{:a 42 :b 100}" | \
26+ bb -IO -e '(let [[{:keys [a b]} & _] *input*] {:result (+ a b)})'
27+
28+ #+END_SRC
29+
30+ ** Вызов внешних команд
31+
32+ #+BEGIN_SRC clojure
33+
34+ (println (:out (shell/sh "echo" "123")))
35+
36+ #+END_SRC
37+
38+ #+BEGIN_SRC clojure
39+
40+ (prn (shell/sh "echo" "123"))
41+
42+ #+END_SRC
43+
44+ #+BEGIN_SRC clojure :backend babashka
45+
46+ (println '((1 2 3) (4 5 6)))
47+
48+ #+END_SRC
49+
50+ ** CLI args ([[https://github.com/babashka/cli][babashka.cli]])
51+
52+ #+BEGIN_SRC clojure
53+
54+ (require '[babashka.cli :as cli])
55+
56+ (cli/parse-args ["--output" "foo.txt" "--" "bar"])
57+
58+ (cli/parse-opts ["--port=8080"] {:coerce {:port :int}})
59+
60+ (cli/parse-args ["--verbose"])
61+
62+ #+END_SRC
63+
64+ ** Задачи и [[file:bb.edn][bb.edn]]
65+
66+ Список задач:
67+
68+ #+BEGIN_SRC shell :results verbatim
69+
70+ bb tasks
71+
72+ #+END_SRC
73+
74+ Выполнение задачи:
75+
76+ #+BEGIN_SRC shell
77+
78+ bb run grep-me
79+
80+ #+END_SRC
Original file line number Diff line number Diff line change 1+ {:tasks
2+ {hi
3+ {:doc " Greets you"
4+ :task (shell " echo 123" )}
5+
6+ hihi
7+ (do (run 'hi)
8+ (run 'hi))
9+
10+ grep-me
11+ (-> (shell {:out :string } " echo -n '123\n 456\n " )
12+ (shell " grep 5" ))}}
Original file line number Diff line number Diff line change 1+ #! /usr/bin/env bb -I
2+
3+ (defn sum-a-and-b []
4+ (let [[{:keys [a b]} & _] *input*]
5+ {:result (+ a b)}))
6+
7+ (prn (sum-a-and-b ))
You can’t perform that action at this time.
0 commit comments