ShabangUno shabang (chiamato anche shebang, hashbang, hashpling, o pound bang), nei sistemi operativi Unix e Unix-like, è una sequenza di caratteri che inizia per " Il termine deriverebbe da una contrazione di SHArp bang o haSH bang, che rappresentano i nomi tradizionalmente usati in ambienti Unix per riferirsi ai due caratteri in questione. Un'altra teoria sul sh di shabang deriva dalla shell testuale standard, " StoriaLo shabang fu introdotto da Dennis Ritchie tra la versione 7 di Unix e la versione 8 nei Bell Labs. Fu quindi aggiunta a BSD a Berkeley. Dato che la versione 8 e successive non furono distribuite al pubblico, la prima diffusione di massa dello shabang avvenne proprio su BSD. CaratteristichePrecisamente, consiste in un magic number (il carattere cancelletto e il punto esclamativo " Dato che nei linguaggi di scripting il carattere " PortabilitàMentre molti shabang indicano interpreti che hanno pathname standard ben noti, è anche possibile che tra varianti di uno stesso sistema operativo lo stesso interprete vada indicato con pathname differenti. In assenza di una rigida standardizzazione delle posizioni di ciascun interprete, ci possono essere problemi dovuti al fatto che lo shabang potrebbe richiedere un interprete che non esiste, o che non si trova nel posto indicato. Questo limita la portabilità del file. Per questo motivo, nel passaggio da computer a computer, è spesso necessario modificare lo script proprio per permettere la portabilità tra sistemi diversi. Questa è una delle ragioni per cui lo standard POSIX non prevede questa caratteristica, che è però comunemente utilizzata, soprattutto a livello didattico. Spesso il comando env può essere usato per aggirare il problema. Un altro problema di portabilità è legato alla gestione di eventuali parametri specificati all'interprete, in quanto alcuni sistemi hanno possibilità limitate al riguardo. Ad esempio sui sistemi basati su Linux lo shabang #!/usr/bin/env perl -w
verrà eseguito come /usr/bin/env: perl -w: No such file or directory Altri sistemi possono comportarsi in modo ancora diverso. Shabang come numero magicoLo shabang è di fatto una versione leggibile di un magic number nel file eseguibile. La stringa magica diviene la sequenza di byte I file eseguibili che non richiedono interpreti hanno invece altri magic number. EsempiScript di shellEsegue usando Bash: #!/bin/bash
Esegue usando la shell #!/bin/sh
Esegue usando Korn shell: #!/bin/ksh
Esegue usando csh, la C shell: #!/bin/csh
Script PerlEsegue usando Perl: #!/usr/bin/perl
Esegue usando Perl, ma si assume che l'interprete Perl sia in un'altra directory: #!/usr/local/bin/perl
Script PythonEsegue usando Python: #!/usr/bin/python
Esegue usando Python versione 3: #!/usr/bin/env python3
Script RubyEsegue usando Ruby: #!/usr/bin/ruby
Script TclEsegue uno script Tcl invocando l'interprete attraverso #!/bin/sh
# Questa linea e la seguente sono ignorate da tclsh, mentre la shell ignora solo questa linea \
exec tclsh "$0" "$@"
Questo metodo sfrutta una particolarità del linguaggio Tcl: se una linea di commento termina con una barra inversa (" Di fatto lo script viene avviato una prima volta tramite Altri scriptEsegue usando l'interprete Awk presente nella directory #!/bin/awk -f
Esegue usando Lua: #!/usr/bin/lua
Esegue usando l'interprete PHP: #!/usr/bin/php
Invocazione con parametri e opzioniIn molti sistemi si può indicare di seguito all'interprete un parametro o una opzione, ed in alcuni di essi anche più parametri e/o opzioni. Tuttavia, implementazioni diverse hanno comportamenti e vincoli diversi: ad esempio in molti sistemi, tra cui quelli basati su Linux, tutto ciò che segue l'interprete è passato come un unico parametro anche se contiene spazi, mentre su altri sistemi vi sono limitazioni sulla lunghezza complessiva dello shabang.[1] Esegue usando l'interprete AWK, e ad esso viene passata anche l'opzione #!/bin/awk -f
# Il resto dello script AWK
...
Esegue usando l'interprete Perl, e ad esso viene passata anche l'opzione -w per ottenere i messaggi di warning: #!/usr/bin/perl -w
#
# Il resto dello script Perl
...
Esegue usando bash, indicando con l'opzione #!/bin/bash -x
#
# Il resto dello script Bash
...
Risoluzione di problemi legati allo shabang tramite |