Multiline shebang: Difference between revisions

From Rosetta Code
Content added Content deleted
(Added newLISP)
(Added Lua)
Line 33: Line 33:


<lang haskell>#!/usr/bin/env runhaskell</lang>
<lang haskell>#!/usr/bin/env runhaskell</lang>

=={{header|Lua}}==
A plain shebang will do.

<lang lua>#!/usr/bin/env lua</lang>


=={{header|newLISP}}==
=={{header|newLISP}}==

Revision as of 05:27, 6 August 2011

Multiline shebang is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

Simple shebangs can help with scripting, e.g. #!/usr/bin/env python at the top of a Python script will allow it to be run in a terminal as "./script.py".

Occasionally, a more complex shebang line is needed. For example, some languages do not include the program name in ARGV; a multiline shebang can reorder the arguments so that the program name is included in ARGV.

The syntax for a multiline shebang is complicated. You need to simultaneously comment the shebangs away from the language and reveal them uncommented to Bash so that the shebangs can be executed.

Clojure

The namespace = basename = filename minus the extension must be passed as a value to Clojure's -m flag.

<lang clojure>":";exec clj -m `basename $0 .clj` $0 ${1+"$@"} ":";exit</lang>

Common Lisp

Here, the script name is passed once to CLISP and once to ext:*args*, which normally omits it.

<lang lisp>#!/bin/bash

  1. |

exec clisp -q -q $0 $0 ${1+"$@"} exit |#</lang>

Emacs Lisp

<lang lisp>:;exec emacs -batch -l $0 -f main $*</lang>

Erlang

Note that the binary is escript, not erl. The latter refuses to compile or run code that contains a shebang.

<lang erlang>#!/usr/bin/env escript</lang>

Haskell

A plain shebang will do.

<lang haskell>#!/usr/bin/env runhaskell</lang>

Lua

A plain shebang will do.

<lang lua>#!/usr/bin/env lua</lang>

newLISP

A plain shebang will do.

<lang lisp>#!/usr/bin/env newlisp</lang>

Node.js

A plain shebang will do.

<lang javascript>#!/usr/bin/env node</lang>

Perl

A plain shebang will do.

<lang perl>#!/usr/bin/env perl</lang>

Python

A plain shebang will do.

<lang python>#!/usr/bin/env python</lang>

Ruby

A plain shebang will do.

<lang ruby>#!/usr/bin/env ruby</lang>