Une autre méthode consiste à appeler l'interprète et à lui transmettre le chemin du script:
/bin/sh /path/to/script
Le point et la source sont équivalents. (EDIT: non, ils ne le sont pas: comme le souligne KeithB dans un commentaire sur une autre réponse, "." Ne fonctionne que dans les shells liés à bash, où "source" fonctionne dans les shells lié à bash et csh.) Il exécute le script dans -place (comme si vous avez copié et collé le script ici). Cela signifie que toutes les fonctions et variables non locales du script restent. Cela signifie également que si le script insère un cd dans un répertoire, vous serez toujours là quand ce sera fait.
Les autres méthodes d'exécution d'un script seront exécutées dans son propre sous-shell. Les variables dans le script ne sont pas encore en vie quand c'est fait. Si le script a changé de répertoire, cela n’affecte pas l’environnement d’appel.
/ path / to / script et / bin / sh Les scripts sont légèrement différents. Typiquement, un script a un "shebang" au début qui ressemble à ceci:
#! /bin/bash
C'est le chemin de l'interpréteur de script. S'il spécifie un interprète différent de celui que vous utilisez lorsque vous l'exécutez, il peut se comporter différemment (ou ne pas fonctionner du tout).
Par exemple, les scripts Perl et les scripts Ruby commencent par (respectivement):
#! /bin/perl
et
#! /bin/ruby
Si vous exécutez l'un de ces scripts en même temps /bin/sh script
, ils ne fonctionneront pas du tout.
Ubuntu n’utilise pas le shell bash, mais un très similaire appelé dash. Les scripts qui nécessitent bash peuvent fonctionner légèrement mal lorsqu'ils sont appelés /bin/sh script
car vous venez d'appeler un script bash à l'aide de l'interpréteur de tirets.
Une autre petite différence entre l'appel direct du script et la transmission du chemin d'accès du script à l'interpréteur réside dans le fait que le script doit être marqué comme exécutable pour pouvoir l'exécuter directement, mais pas pour l'exécuter en transmettant le chemin d'accès à l'interpréteur.
Autre variante mineure: vous pouvez préfixer l’une de ces manières d’exécuter un script avec eval, vous pouvez donc avoir
eval sh script
eval script
eval . script
etc. Cela ne change rien, mais je pensais l'inclure pour plus de précision.