71 votes

Message d'erreur "source : not found" lors de l'exécution d'un script.

Je suis en train de créer une petite installation automatisée script qui va modifier /etc/profile y $HOME/.profile si certains chemins ne sont pas exportés. J'aimerais ensuite les recharger automatiquement.

J'ai lu que source fait ça, alors j'ai allumé mon terminal et je suis entré :

source /etc/profile
source ~/.profile

Dans le terminal, il n'y a pas eu d'erreur.

Cependant, en plaçant ces deux commandes à l'intérieur du script de Bash, on obtient les résultats suivants source: not found .

  1. Comment puis-je être sûr que le script est exécuté par Bash, même si #!/bin/sh est spécifié (apparemment, il ne le garantit pas) ?
  2. Pourquoi dirait-on que ces deux sources sont introuvables alors qu'elles sont indubitablement présentes ?

93voto

chaos Points 25386

/bin/sh n'est pas bash . Pour exécuter votre script avec bash , écrivez #!/bin/bash comme première ligne de votre script.

L'erreur source: not found n'est pas abandonné, car /etc/profile n'est pas trouvé. Il est abandonné, car source n'est pas trouvé. source est une fonction intégrée de Bash, et vous n'exécutez pas le script avec bash . La raison pour laquelle il n'est pas trouvé est donc claire. Changez le #! dans le script, et ça marchera.

19voto

shivampip Points 301

Certains obus supportent . au lieu de source . Vous pouvez donc essayer quelque chose comme ceci

. filename

au lieu de

source filename

J'espère que cela fonctionnera

11voto

Radu Rădeanu Points 156862

1. Comment être sûr que le script est exécuté par Bash, même si #!/bin/sh est spécifié (apparemment, il ne le garantit pas) ?

Pour être sûr qu'un script écrit pour sh Shell (comme dans votre cas - cf. Quelle est la différence entre #!/bin/sh et #!/bin/bash ? ) est exécuté par Bash, il suffit d'exécuter la commande suivante :

bash script_name

Ainsi, vous n'obtiendrez plus cette erreur.

2. Pourquoi dirait-on que ces deux sources sont introuvables alors qu'elles sont indubitablement présentes ?

Il ne dit pas que ces fichiers sources ne sont pas là. Il dit que le source n'est pas trouvée. C'est normal, car puisque vous démarrez votre script avec #!/bin/sh votre script s'exécutera en utilisant la fonction sh et non bash comme vous pouvez le penser. Pourquoi est-ce normal ? Parce que source est une commande Bash intégrée, mais pas une commande sh intégré. Pour créer un fichier source dans sh vous devez utiliser . (point). Exemple :

. /etc/profile
. ~/.profile

Une autre façon est de changer la ligne shebang en #!/bin/bash como chaos dit dans sa réponse .

8voto

muru Points 180007

Voir ceci Question :

/bin/sh est généralement un autre Shell qui essaie d'imiter le Shell. De nombreuses distributions utilisent /bin/bash para sh il supporte les sources. Sur Ubuntu, cependant, /bin/dash est utilisé qui ne supporte pas la source. Si vous ne pouvez pas modifier le script, essayez de modifier le script qui l'exécute.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X