J'ai vu cette question sur ce site et cela m'a incité à poser cette question. Je veux savoir sous Unix quelle est la différence entre un exécutable et un script shell?
J'ai vu cette question sur ce site et cela m'a incité à poser cette question. Je veux savoir sous Unix quelle est la différence entre un exécutable et un script shell?
Réponses:
Un exécutable fait référence à tout fichier avec le jeu de bits exécutables qui pourrait être exécuté (même s'il y a des erreurs dans le fonctionnement réel du programme).
Un script shell est un type spécifique d'exécutable destiné à être interprété par un shell utilisant la #!
directive pour spécifier un interpréteur.
Un script est un fichier qui:
Un script shell est un script dont l'interpréteur est un shell . Dans le monde unix, «coquille» fait référence à la famille des coquilles qui ressemblent à la coquille Bourne ; ces coques modernes (frêne, bash, ksh, zsh,…) sont conformes à la norme shell POSIX . Plus généralement, le mot «shell» peut inclure d'autres interpréteurs de commandes tels que csh, tcsh, fish,…
Un exécutable est un fichier qui peut être exécuté. Pour être efficacement exécutable, un fichier doit avoir deux propriétés:
ls -l
: le x
personnage doit être présent dans la colonne d'autorisation.Le format du fichier doit être celui que le système reconnaît comme exécutable. Les formats exécutables peuvent être divisés en plusieurs catégories:
#!
suivis d'un chemin d'accès à un fichier. Pour exécuter un tel fichier, le noyau exécute le programme interpréteur et lui passe le chemin du script comme argument.Notez qu'être un exécutable dépend du système. Par exemple, un binaire amd64 Linux est exécutable sur un système Linux amd64 mais pas sur un système 32 bits. Un binaire pour Android n'est pas exécutable sur une installation Linux normale. Un exécutable Windows n'est exécutable sur Linux que si Wine est présent. Un script qui commence par #!/usr/local/bin/ruby
n'est exécutable que si un programme se trouve sur /usr/local/bin/ruby
.
Un script shell est généralement exécutable. Mais il peut être non exécutable si vous n'avez pas la permission de l'exécuter. Vous pouvez toujours le faire interpréter en le passant explicitement à l'interpréteur (par exemple bash /path/to/script
) - «faites-le interpréter» est une façon élégante de dire «exécuter».
shell-script:
Un script shell est une série de commandes qui seront interprétées par un shell (généralement sh ou un shell compatible sh, parfois un autre.)
Le nom du script peut, mais ne doit PAS nécessairement, se terminer par ".sh" ou ".bash" ou ".csh" etc (donnant une indication sur le shell par lequel il doit être lancé).
Pour plus de clarté, je suppose que le nom du script est script
, et le shell dans lequel il doit être lancé est bash
.
Une manière typique de le lancer en shell serait alors: bash /absolute/path/to/the/script
ou bash ./relative/path/to/the/script
. De cette façon, il n'est pas nécessaire que le bit exécutable soit défini, car il n'est lu que par bash, qui exécute ensuite le contenu.
Il peut également être défini + x (exécutable) pour permettre de le lancer directement à partir de votre session shell actuelle avec: / absolu / chemin / vers / le script (ou ./relative/path/to/the/script). Attention: par défaut, lorsqu'il est lancé de cette façon, il est lancé via le shell que vous avez tapé ou via un shell posix (le comportement dépend du système d'exploitation), il peut donc ne pas être le shell par lequel il est censé être exécuté. C'est pourquoi vous pouvez (et devriez) spécifier comme première ligne du script: #! / Path / to / good / shell qui indique à votre système d'exploitation que ce script doit vraiment être lancé par / path / to / good / shell à la place.
exécutable:
Un exécutable est un fichier dont le bit "x" est défini pour le (s) utilisateur (s) / groupe (s) par lequel il est censé être lancé. Il peut s'agir généralement d'un "binaire" ou d'un script.
Astuce: file /some/file
peut vous en dire plus sur le contenu du fichier. Essayez file /usr/bin/bash
ou file /etc/profile
pour voir quelques exemples.