Cosè #! / Bin / bash nello script di shell? Qualè la differenza tra / bin / sh e / bin / bash? Perché alcune volte lo script della shell funziona senza le righe?


Migliore risposta

#!/bin/bash

Questo è noto come shebang, dice allinterprete che le seguenti righe sono scritte per bash, quindi esegui questo file come script bash.

#Example: Scripts are usually executed like below:

./scriptName

Quindi lo shebang determina come interpretare lo script, a volte potrebbe essere il seguente:

#!/bin/sh

#!//usr/bin/perl

#!/usr/bin/python

#!/bin/bash

#!/bin/ksh

Quindi queste righe determinano come dovrebbero essere gli script essere interpretato ed eseguito. ora arrivando a Perché /bin/sh?

Punta a una delle shell configurate, a volte sh punta a bash, a volte qualche altra shell come cshell, dash,zsh ,ksh ecc.

Esempio:

#case-1:

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash

#case-2

ls -lrt /bin/sh

lrwxrwxrwx 1 root root 4 Jul 12 2017 /bin/sh -> bash

Quindi, nel caso in cui tu stia utilizzando #!/bin/sh nel tuo script, il comportamento del tuo script sarà diverso in base a quale shell sh punta al tuo sistema. Tieni presente che puoi sovrascrivere lo shebang eseguendo lo script come:

bash scriptName

#or

sh scriptName

Nei due casi precedenti, shebang non influirà sullesecuzione e verrà eseguita da bash e sh (shell indicata da questo).

Risposta

Bene,” esattamente “come funzionano ha molti livelli di dettaglio, quindi qui saremo piuttosto inesatti. Tutti i programmi vengono eseguiti inserendo il loro codice in una specifica sezione di memoria dedicata e quindi invocando il punto di ingresso di quellimmagine del codice in memoria. Dopodiché, il programma viene eseguito.

Latto di mettere in memoria limmagine del codice viene eseguito dal sistema operativo ed è ciò che chiamiamo “lancio” o esecuzione del programma. Il sistema operativo lo fa di propria iniziativa solo una volta; allavvio, quando avvia il processo init . Il processo init e i suoi discendenti chiedono al sistema operativo di avviare altri processi, richiamando exec Chiamata di sistema del sistema operativo.

La shell è allo stesso tempo speciale e anche ordinaria. È solo un altro programma che funziona, come qualsiasi altro. Non ha particolari superpoteri o proprietà speciali. Ha lo scopo di consentire allutente di accedere ai servizi del sistema operativo, principalmente per lanciare altri programmi che lutente specifica. Fornisce metodi accessibili allutente che consentono allutente di accedere al filesystem e di specificare come vengono utilizzati alcuni flussi standard di comunicazione dati ( stdin , stdout e stderr ).

Le shell forniscono un linguaggio di programmazione che può essere utilizzato per fare le cose in modi automatizzati, prendendo decisioni e iterando, per efficienza, in modo che possano funzionare senza linterazione dellutente. Forniscono e utilizzano una sintassi e una notazione speciali che lutente deve apprendere e utilizzare per richiamare il linguaggio di programmazione e lelaborazione da riga di comando. Lelaborazione dei comandi della shell può provenire da un terminale interattivo o da file di testo contenenti script.

I programmi lanciati da una shell sono chiamati processi figli della shell. Qualsiasi processo può avviare un altro processo, quindi la shell non è speciale in questo senso. La shell è ottimizzata per consentire allutente di specificare come avviare i suoi processi figli. Puoi vedere la gerarchia di tutti i processi su un host Linux usando il comando

ps -e lf

Da qualche parte nellelenco troverai il processo “ ps ” stesso e verrà visualizzato come processo figlio del processo shell utilizzato per avviarlo.

Lì sono molto più dettagli; troppi da coprire in una risposta Quora.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *