Ho visto questa domanda su questo sito e questo mi ha spinto a porre questa domanda. Voglio sapere in Unix parlare qual è la differenza tra un eseguibile e uno script di shell?
Ho visto questa domanda su questo sito e questo mi ha spinto a porre questa domanda. Voglio sapere in Unix parlare qual è la differenza tra un eseguibile e uno script di shell?
Risposte:
Un eseguibile si riferisce a qualsiasi file con il set di bit eseguibile che potrebbe essere eseguito (anche se ci sono errori nell'esecuzione effettiva del programma).
Uno script di shell è un tipo specifico di eseguibile che deve essere interpretato da una shell che utilizza la #!
direttiva per specificare un interprete.
Uno script è un file che:
Uno script di shell è uno script il cui interprete è una shell . Nel mondo unix, "shell" si riferisce alla famiglia di shell che assomigliano alla shell Bourne ; moderne tali conchiglie (ash, bash, ksh, zsh, ...) sono conformi allo standard shell POSIX . Più in generale, la parola "shell" può includere altri interpreti di comandi come csh, tcsh, fish, ...
Un eseguibile è qualsiasi file che può essere eseguito. Per essere efficacemente eseguibile, un file deve avere due proprietà:
ls -l
: il x
personaggio deve essere presente nella colonna dei permessi.Il formato del file deve essere quello che il sistema riconosce come eseguibile. I formati eseguibili possono essere suddivisi in diverse categorie:
#!
seguiti da un percorso a un file. Per eseguire un tale file, il kernel esegue il programma interprete e gli passa il percorso allo script come argomento.Si noti che essere un eseguibile dipende dal sistema. Ad esempio, un binario Linux amd64 è eseguibile su un sistema Linux amd64 ma non su un sistema a 32 bit. Un binario per Android non è eseguibile su una normale installazione Linux. Un eseguibile di Windows è eseguibile su Linux solo se Wine è presente. Uno script che inizia con #!/usr/local/bin/ruby
è eseguibile solo se è presente un programma in /usr/local/bin/ruby
.
Di solito è eseguibile uno script di shell. Ma può essere non eseguibile, se non si dispone dell'autorizzazione per eseguirlo. Puoi ancora averlo interpretato passandolo esplicitamente all'interprete (es. bash /path/to/script
) - "farlo interpretare" è un modo elegante di dire "esegui".
shell-script:
Uno script di shell è una serie di comandi che verranno interpretati da una shell (di solito sh o una shell sh-compatibile, a volte un'altra).
Il nome dello script può, ma NON è necessario, terminare in ".sh" o ".bash" o ".csh" ecc. (Dando un suggerimento sulla shell da cui dovrebbe essere lanciato).
Per chiarezza, suppongo: il nome dello script è script
e la shell in cui dovrebbe essere lanciato è bash
.
Un modo tipico di avviarlo in shell sarebbe quindi: bash /absolute/path/to/the/script
o bash ./relative/path/to/the/script
. In questo modo, non è necessario che il bit eseguibile sia impostato, poiché viene letto solo da bash, che quindi esegue il contenuto.
Si può anche essere impostato + x (eseguibile) per consentire di lanciare direttamente dalla sessione di shell corrente con: / assoluto / path / to / la / script (o ./relative/path/to/the/script). Attenzione: per impostazione predefinita, quando viene avviato in questo modo, viene avviato tramite la shell digitata o tramite una shell posix (il comportamento dipende dal sistema operativo), quindi potrebbe non essere la shell da cui dovrebbe essere eseguita. Ecco perché puoi (e dovresti) specificare come prima riga dello script: #! / Path / to / good / shell che indica al tuo sistema operativo che lo script dovrebbe davvero essere lanciato da / path / to / good / shell.
eseguibile:
Un eseguibile è un file con il bit "x" impostato per l'utente / i / i gruppo / i da cui dovrebbe essere avviato. Può essere tipicamente un "binario" o uno script.
Suggerimento: file /some/file
puoi dirti di più sul contenuto del file. Prova file /usr/bin/bash
o file /etc/profile
per vedere alcuni esempi.