J'ai deux scripts shell, a.sh
et b.sh
.
Comment puis-je appeler b.sh
depuis le script shell a.sh
?
J'ai deux scripts shell, a.sh
et b.sh
.
Comment puis-je appeler b.sh
depuis le script shell a.sh
?
Il existe plusieurs façons de procéder :
Rendre le script exécutable avec chmod a+x /chemin/du/fichier
(commentaire de Nathan Lilienthal), ajouter la ligne #!/bin/bash
(appelée shebang) en haut, et ajouter le chemin du fichier à la variable d'environnement $PATH
. Ensuite, vous pouvez l'appeler comme une commande normale;
Ou l'appeler avec la commande source
(qui est un alias pour .
), comme ceci :
source /chemin/du/script
Ou utiliser la commande bash
pour l'exécuter, comme :
/bin/bash /chemin/du/script
Les première et troisième approches exécutent le script en tant qu'un autre processus, donc les variables et fonctions dans l'autre script ne seront pas accessibles.
La deuxième approche exécute le script dans le processus du premier script, et récupère les variables et fonctions de l'autre script (donc elles sont utilisables à partir du script appelant). Bien entendu, cela exécutera toutes les commandes dans l'autre script, pas seulement définir des variables.
Dans la deuxième méthode, si vous utilisez exit
dans le deuxième script, cela va aussi quitter le premier script. Ce qui n'arriverait pas dans les première et troisième méthodes.
N'oubliez pas de chmod a+x /chemin/vers/fichier
sinon il ne sera pas exécutable. S'applique uniquement à la méthode ./script.
N'oubliez pas de modifier le format / encodage des fichiers exécutables dans Unix s'ils ont été créés dans DOS puis téléchargés dans l'environnement Unix -> dos2unix
Aussi, notez que la portée de chaque script est le niveau supérieur du répertoire de votre projet - si ./.git/hooks/pre-commit
a source foo
, vous feriez mieux d'avoir ./foo
!
Cela suppose que le script.sh se trouve dans le même répertoire que le script en cours d'exécution. Si vous vouliez appeler un script ailleurs, vous diriez sh /script.sh
Cela utilise également deux shells, bash
et sh
. Même lorsque sh
est en fait bash
, il ne se comporte pas de la même manière. Si vous utilisez #!/bin/bash
, alors vous voulez probablement utiliser bash script.sh
(ou simplement ./script.sh
pour utiliser le hashbang de ce script).
Continuait à recevoir une erreur de permission refusée même lorsque j'ai défini chmod +x
sur le fichier .sh. Des suggestions?
Vous pouvez utiliser /bin/sh
pour appeler ou exécuter un autre script (via votre script actuel) :
# cat showdate.sh
#!/bin/bash
echo "La date est : `date`"
# cat mainscript.sh
#!/bin/bash
echo "Vous êtes connecté en tant que : `whoami`"
echo "`/bin/sh ./showdate.sh`" # chemin exact du fichier script
La sortie serait :
# ./mainscript.sh
Vous êtes connecté en tant que : root
Date is: Thu Oct 17 02:56:36 EDT 2013
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
8 votes
Pouvez-vous donner des détails : quel système d'exploitation et quel(s) shell(s) utilisez-vous ou parlez-vous simplement de ce problème dans le principe ? Un exemple de code serait également utile.
17 votes
Il ne s'agit pas réellement d'une question spécifique et ne démontre pas d'effort préalable pour résoudre le problème.
1 votes
Un problème que j'avais était que
b.sh
n'avait pas les permissions d'exécution. Il serait bon de vérifier.1 votes
Ajoutez
./
avant le nom du script, par exemple, au lieu de :b.sh
, utilisez :./b.sh
2 votes
Si quelqu'un continue de recevoir une erreur
Aucun fichier ou dossier de ce type
stackoverflow.com/a/2920431/1356559