#!/usr/bin/env 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
.rb.md file would instead start with
Or, more succinctly using
#!/usr/bin/env 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- | $interpreter
Note that with this approach, you can’t pass command-line arguments. A better solution would probably involve a temporary file and a more conventional invocation where the first arg is the (liberated) script’s filename and the rest are passed through to it.
Patches are always welcome, of course.
curl http://luchenlabs.com/lp/liberate.sh -o /usr/local/bin/liberate
Paste that into your shell.