#! liberate sh Huh?



a literate source file interpreter

This program provides an easy way to transparently execute literate programs written in interpreted programming languages.


liberate is not intended for interactive use but rather via a shebang line on the target source file, like the one at the top of this document.

For instance, where a .rb file might start with


An equivalent .rb.md file would instead start with

#!/usr/local/bin/liberate /usr/local/bin/ruby

Or, on systems that allow it, more succinctly

#!liberate ruby

Passing flags like -w to the interpreter via shebang may cause strange behaviour due to the way we juggle arguments. I recommend against it.


Pretty simple. We grab the interpreter (from the shebang) and the target file (from the OS)…

interpreter=$1; shift
file=$1; shift

Then we can cut and grep our way to success.

cat $file | grep '^    ' | cut -b 5- > $output

Lastly, run the thing.

$interpreter $output $@

Patches are always welcome, of course.


curl http://luchenlabs.com/lp/liberate.sh -o /usr/local/bin/liberate

Paste that into your shell.