sunng87.shake

https://github.com/sunng87/shake.git

git clone 'https://github.com/sunng87/shake.git'

(ql:quickload :sunng87.shake)
121

shake

A Clojure library that shakes your shell.

Usage

Leiningen

[shake "0.4.0"]

Just That Simple

(require '[shake.static :as sh])

;; any shell command ...
(sh/uname -a) ;;returns a #<UNIXProcess java.lang.UNIXProcess@1833160>

;; using clojure variables (vars, local bindings) in shake
(let [home "/home/sunng87"]
  (sh/ls -l $home))

;; using clojure forms in shake
(sh/curl $(format "https://github.com/%s" "sunng87"))

Too slow to initialize ?

The dynamic shake creates vars on demand. It only works in scripts/repl mode because it's by hacking the compiler.

(require '[shake.dynamic :as sh])

;; any shell command ...
(sh/uname -a) ;;returns a #<UNIXProcess java.lang.UNIXProcess@1833160>

;; using clojure variables (vars, local bindings) in shake
(let [home "/home/sunng87"]
  (sh/ls -l $home))

;; using clojure forms in shake
(sh/curl $(format "https://github.com/%s" "sunng87"))

Could not compile (no such var)

The fallback solution, declare executable before you are using it.

(require '[shake.core :as sh])

(sh/declare-exec "uname")
(sh/declare-exec "ls")
(sh/declare-exec "curl")

;; any shell command ...
(sh/uname -a) ;;returns a #<UNIXProcess java.lang.UNIXProcess@1833160>

;; using clojure variables (vars, local bindings) in shake
(let [home "/home/sunng87"]
  (sh/ls -l $home))

;; using clojure forms in shake
(sh/curl $(format "https://github.com/%s" "sunng87"))

I/O

shake extends Process with clojure's IOFactory. So you can (input-stream) or (output-stream) the process to get a streamed I/O.

;; print output of `uname -a`
(print (slurp (input-stream (sh/uname -a))))

License

Copyright © 2012 Sun Ning mailto:sunng@about.me

Distributed under the Eclipse Public License, the same as Clojure.