Merci pour toute la contribution. Je vais essayer de répondre à ma propre question maintenant et fournir un guide complet des différentes possibilités pour exécuter des scripts et des binaires. Veuillez modifier et commenter et nous pourrons proposer quelque chose de complet et de correct. Voici ma suggestion:
Dans un premier temps, deux points à préciser:
Linux fait une distinction entre une commande et un chemin . Une commande est tapée telle quelle à l'invite et exécutera une commande intégrée ou obligera Linux à rechercher un binaire ou un script correspondant sur $ PATH.
Pour que Linux interprète quelque chose comme un chemin, il doit contenir au moins une barre oblique (/). Par exemple, dans ./myScript, ./peut sembler assez redondant - il n'est là que pour que Linux l'interprète comme un chemin plutôt que comme une commande.
Ainsi, les options pour exécuter un binaire ou un script:
Exécuter un binaire binary:
$ binary # when 'binary' is on the PATH, or is a built-in
$ ./binary # when 'binary' is not on the path but in the current directory
$ /home/me/binary # when 'binary' is not on the PATH, and not in the current dir
Exécuter un script script:
Le fichier devra avoir des autorisations d'exécution, sauf indication contraire.
$ script # execute a script that is on PATH. Will be executed in a new shell.
# The interpreter to use is determined by the she-bang in the file.
$ ./script # execute a script that is in the current dir. Otherwise as above.
$ /a/dir/script # when the script is not on the PATH and not in current dir.
# Otherwise as above.
$ . script # execute a script in the current dir. Will be executed in the
# current shell environment.
$ source script # equivalent to the above *1
$ sh script # executes 'script' in a new shell *2 (the same goes for 'bash ...',
# 'zsh ...' etc.). Execute permission not neccessary.
À propos de la frange :
Les scripts avec un coup (par exemple #!/bin/sh) sur la première ligne indiquent quel interprète utiliser.
- Cet interpréteur sera utilisé lorsqu'il sera exécuté par
./scriptou en utilisant une commande: script( scriptdoit être sur le CHEMIN)
- L'utilisation
sh scriptignorera le coup et utilisera, dans ce cas, shcomme interprète
- Utiliser
. scriptou sourceignorera le she-bang et utilisera l'interpréteur actuel (car .ou sourceéquivaut à simplement exécuter chaque ligne du script dans le shell actuel)
Notes de bas de page
* 1: Ce n'est que presque vrai. En bash ce sont en effet la même commande, mais lors de l'utilisation source, scriptseront recherchés dans $ PATH avant le répertoire courant. C'est bash, mais dans les shells POSIX uniquement, sourcecela ne fonctionne pas, mais .ça marche . Utilisez donc plutôt ce dernier pour la portabilité.
* 2: ce qui se passe en fait, c'est que nous exécutons le sh binaire avec 'script' comme argument, ce qui fera que 'sh' exécutera 'script' dans son nouveau shell