File tree 3 files changed +99
-0
lines changed
3 files changed +99
-0
lines changed 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