Je crée un petit script d'installation automatisé qui modifiera /etc/profile
et $HOME/.profile
si certains chemins ne sont pas exportés. Ensuite, j'aimerais les recharger automatiquement.
J'ai lu que source
fait cela, alors j'ai allumé mon terminal et entré:
source /etc/profile
source ~/.profile
Depuis le terminal, aucune erreur n’a été générée.
Cependant, l'insertion de ces deux commandes dans le script Bash entraîne source: not found
.
#!/bin/sh
est spécifié (apparemment, cela ne le garantit pas)?/bin/sh
n'est pas bash
. Pour exécuter votre script avec bash
, écrivez #!/bin/bash
en tant que première ligne de votre script.
L'erreur source: not found
n'est pas supprimée, car /etc/profile
est introuvable. Il a été supprimé, car source
n’a pas été trouvé. source
est une fonction intégrée de Bash et vous n'exécutez pas le script avec bash
. On comprend donc pourquoi on ne le trouve pas. Modifiez la ligne #!
dans le script, et cela fonctionnera.
1. Comment puis-je être sûr que le script est exécuté par Bash, même si
#!/bin/sh
est spécifié (apparemment, cela ne le garantit pas)?
Pour être sûr qu'un script écrit pour sh
Shell (comme dans votre cas - voir Quelle est la différence entre #!/Bin/sh et #!/Bin/bash? ) est exécuté par Bash, exécutez simplement la commande suivante:
bash script_name
Ainsi, vous n'obtiendrez plus cette erreur.
2. Pourquoi dirait-on que ces deux sources ne peuvent pas être trouvées lorsqu'elles sont incontestablement là?
Il ne dit pas que ces fichiers sourcés ne sont pas là. Il indique que la commande source
est introuvable. Ceci est normal car, puisque vous démarrez votre script avec la ligne #!/bin/sh
, votre script s'exécutera avec sh
et non bash
, comme vous pouvez le penser. Pourquoi est-ce normal? Étant donné que la commande source
est une commande intégrée Bash, mais non une commande sh
. Pour créer un fichier dans sh
, vous devez utiliser .
(point). Exemple:
. /etc/profile
. ~/.profile
Une autre méthode consiste à modifier la ligne Shebang en #!/bin/bash
comme chaos dit dans sa réponse .
Voir ceci SO question :
/bin/sh
est généralement un autre shell essayant d'imiter le shell. De nombreuses distributions utilisent/bin/bash
poursh
, elle supporte la source. Sur Ubuntu, cependant,/bin/dash
est utilisé, mais ne prend pas en charge la source. Si vous ne pouvez pas modifier le script, essayez de modifier le shell qui l’exécute.