A pure, fast and (severely!) limited version of Clojure in Clojure for shell scripting.
Properties:
Experimental. Not all Clojure core functions are supported yet, but can be easily added. PRs welcome.
Linux and macOS binaries are provided via brew.
Install:
brew install borkdude/brew/babashka
Upgrade:
brew upgrade babashka
You may also download a binary from Github.
The first argument to bb
is the form to be executed. There is one special
variable, *in*
which is EDN that is piped from stdin.
If the first argument is --version
, then bb
will print the version and exit.
If the first argument is --raw
, then bb
will interpret stdin as string input.
Examples:
$ ls | bb --raw '*in*'
["LICENSE" "README.md" "bb" "doc" "pom.xml" "project.clj" "reflection.json" "resources" "script" "src" "target" "test"]
$ ls | bb --raw '(count *in*)'
11
$ echo '[1 1 1 1 2]' | bb '(vec (dedupe *in*))'
[1 2]
$ echo '[{:foo 1} {:bar 2}]' | bb '(filter :foo *in*)'
({:foo 1})
Functions are written using the reader tag #f
. Currently up to three
arguments are supported.
$ echo '3' | bb '(#f (+ %1 %2 %3) 1 2 *in*)'
6
Regexes are written using the reader tag #r
.
$ ls | bb --raw '*in*' | bb '(filterv #f (re-find #r "reflection" %) *in*)'
["reflection.json"]
Test the JVM version:
script/test
Test the native version:
BABASHKA_TEST_ENV=native script/test
You will need leiningen and GraalVM.
script/compile
Copyright © 2019 Michiel Borkent
Distributed under the EPL License, same as Clojure. See LICENSE.
Can you improve this documentation?Edit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close