Thursday, March 29, 2007

Shbang

Se avete scaricato almeno una delle mie utility avrete notato che il sorgente C# comincia sempre con una o piú righe simili a questa:

//!csc %file%

Probabilmente avrete anche intuito che dopo i caratteri //! ci sono le istruzioni per compilare. Quello che non potevate sapere é che ho sviluppato un'utility che applica automaticamente queste istruzioni quando premo F7 da SciTE.
L'utility si chiama shbang, é scritta anch'essa in C# ed analizza appunto le prime righe del file passato come argomento da linea di comando alla ricerca della sequenza iniziale //!. Fintanto che le righe cominciano con questi tre caratteri il seguito viene interpetato come un comando es eseguito. Quando un comando termina con un codice di terminazione diverso da zero l'esecuzione si interrompe. L'output dei comandi viene rimbalzato all'esterno. Ci sono inoltre 3 pseudo variabili:

  • %file%: il nome del file
  • %name%: il nome del file senza estensione
  • %ext%: l'estensione del file

Eventuali righe bianche vengono ignorate, mentre se una riga non inizia con //! l'elaborazione viene interrotta.
In realtá questa non é la sola sequenza di caratteri riconosciuta. Se usate //@ shbang viene chiamato ricorsivamente; il resto della riga viene passato come argomento.

Non dimenticate di specificare command.build.*.c=shbang $(FileNameExt)
nel file di configurazione cpp.properties di SciTE

Perché il nome shbang? Vi risponde Neil Hodgson (proprio lui, l'autore di SciTE) in questo post

Unix and derivatives use a "#!" (hash bang -> shbang) comment on the
first line of a file to specify the default processor of the file so a
Python program often has a first line like:
#! /usr/bin/env python

No comments: