Questa prima riga (#!/ bin / bash o #!/ bin / sh) ha un nome. È conosciuto come ‘she-bang’ (shabang). Questo deriva dalla concatenazione dei token sharp ( # ) e bang (!). È anche chiamato come sh-bang, hashbang, poundbang o hash-pling. In informatica, una she-bang è la sequenza di caratteri composta dal segno del numero di caratteri e dal punto esclamativo (#!) all’inizio di uno script.
/bin /bash VS/bin / sh
Abbiamo spesso visto varietà di intestazione she-bang o script. Spesso ci chiediamo perché quel particolare script usi quel particolare she-bang, perché non un altro. Sui sistemi operativi Unix-like abbiamo una scelta di shell multiple. La shell è responsabile non solo dei piccoli prompt ma anche dell’interpretazione dei comandi dello script. Quindi la shell gioca un ruolo importante specialmente quando implementiamo logiche grandi e complesse usando condizioni, tubi , loop, ecc.
/bin/sh è un eseguibile che rappresenta la shell di sistema e di solito implementato come un collegamento simbolico che punta all’eseguibile per qualsiasi shell sia la shell di sistema. La shell di sistema è fondamentalmente la shell predefinita che lo script dovrebbe usare. Negli ultimi due anni, Debian (e Ubuntu) hanno deciso di cambiare la shell di sistema da bash a dash — una shell simile ma più leggera e molto più veloce.
Dash è abbastanza ben compatibile con bash, essendo basato sullo stesso standard POSIX. Tuttavia, non implementa le estensioni specifiche di bash. POSIX standard è un’interfaccia del sistema operativo portatile, un tentativo di standardizzare i sistemi operativi UNIX-like. Anche se la shell di sistema di Ubuntu punta a dash, la tua shell di accesso come utente continua ad essere bash in questo momento.
/bin/bash è la shell più comune utilizzata come shell predefinita per il login utente del sistema linux. Il nome della shell è l’acronimo di Bourne-again shell. Bash può eseguire la stragrande maggioranza degli script e quindi è ampiamente utilizzato perché ha più funzionalità, è ben sviluppato e una sintassi migliore.
CHE COS’È ? / PERCHÉ LO USIAMO?
#!/bin/bash
echo $(date) # Will print the output of date command
touch ~/output.txt
echo "Hey there" > ~/output.txt
Consideriamo uno script molto semplice come sopra. In ogni caso più semplice se analizziamo uno script di shell, non è altro che un elenco di comandi memorizzati in un file. Riduce il nostro sforzo per eseguire la stessa attività o comandi ancora e ancora. Quindi se guardiamo all’inizio dello script la prima riga inizia con un hash ( # ) e un punto esclamativo (!). Come già devi sapere che qualsiasi riga che inizia con un hash (#) , viene letta come commento. Quindi quando eseguiamo lo script, la prima riga viene letta come commento e l’interprete passa alla seconda riga. Ma la prima linea ha già fatto il suo lavoro.
Nei sistemi operativi Unix-like quando uno script inizia con un she-bang (#!) viene eseguito come un programma, il programma loader analizza il resto della riga iniziale dello script come una direttiva interprete. Quindi viene eseguito il programma interprete specificato, passando ad esso come argomento il percorso che è stato utilizzato inizialmente attraverso lo script.
Supponiamo che uno script inizi con la seguente riga:
#!/bin/sh
quindi il caricatore del programma viene incaricato di utilizzare il programma /bin/sh invece di qualsiasi altro, passando il percorso dello script come primo argomento.
In parole semplici, il she-bang alla testa dello script dice al sistema che questo file è un insieme di comandi da inviare all’interprete dei comandi indicato. I sistemi operativi Unix-like hanno una varietà di shell e ciascuna delle linee di intestazione dello script chiama un interprete di comandi diverso.
ALCUNI ESEMPI DI she-bang
#!/ bin /sh: Esegue lo script usando la shell Bourne o una shell compatibile, con path/bin / sh
#!/ bin / bash: Esegue lo script usando la shell Bash.
#!/ bin / csh-f: Esegue lo script usando la shell C o una shell compatibile.
#!/ usr / bin /perl-T: Esegue lo script usando perl con l’opzione di controlli di contaminazione
#!/usr / bin / env python :Esegue lo script usando python cercando automaticamente il percorso dell’interprete Python dalle variabili di ambiente
Speriamo di avere un’idea migliore di cosa sia she-bang ora e a quale scopo serve.