Dacă numele unui fișier cu setul de biți de permisiune de execuție este introdus pe linia de comandă sau dacă numele unui astfel de fișier este transmis unuia dintre apelurile variantei exec*() ale bibliotecii C runtime, nucleul Linux va încerca să încărcați și executați-l.
Primul lucru pe care îl face nucleul Linux este să citească primii câțiva octeți ai fișierului, căutând secvențe „magice” cunoscute. Una dintre aceste secvențe magice poate fi interpretată și ca șirul ASCII „#!” cunoscut și sub denumirea de „hash bang” și prescurtat la „shebang”. Când încărcătorul vede asta, va interpreta restul liniei ca numele unui alt fișier pentru exec, trecând primul fișier ca argument. O altă valoare magică este „\x7fELF”, care este un fișier executabil binar clasic, cum ar fi, de exemplu, /bin/sh însuși. Rețineți că implicit pentru încărcătorul de nucleu, dacă fișierul nu are o magie recunoscută, este să executați /bin/sh și să îi transmiteți numele fișierului ca prim argument -- echivalentul a avea un shebang de „#!/bin /SH".
De fapt, marcarea scriptului ca executabil folosind chmod +x ./do_one_thing.sh
împreună cu un shebang de „#!/bin/sh” este echivalentul lui sh ./do_one_thing.sh
. „Extensia de fișiere” sau alte concepte DOS sunt cu adevărat irelevante în afara DOS, a sistemelor sale de operare ancestrale, cum ar fi CP/M, și a sistemelor de operare descendente, precum Microsoft Windows.
Dacă doriți cel mai bun nivel de siguranță, marcați fișierele ca executabile și utilizați shebang-ul corespunzător. Nu te baza pe oameni pentru a face ceea ce trebuie.