J'ai un script bash de haut niveau, disons ScriptA, et quelques autres scripts bash dans un sous répertoire, DY qui est au même niveau que le Script A. Disons les autres scripts bash dans DY sont ScriptB et ScriptC. ScriptA récupérera à la fois ScriptB et ScriptC, et je veux que tous les scripts soient exécutés dans leurs répertoires respectifs. Voici un exemple:Changer le répertoire de travail au répertoire du script courant
Scripta:
#!/bin/bash
touch script_a_1.txt
source DY/ScriptB.sh
touch script_a_2.txt
source DY/ScriptC.sh
ScriptB:
#!/bin/bash
touch script_b_file.txt
ScriptC:
#!/bin/bash
touch script_c_file.txt
Alors script_a_1.txt et script_a_2.txt devrait être dans le répertoire Scripta in, et script_b_file.txt et script_c_file.txt doivent être dans le sous-répertoire DY.
J'ai essayé de placer
cd "$(dirname "${BASH_SOURCE[0]}")" && pwd
en haut de ScriptB et ScriptC et Scripta quand il revient de ScriptB, mais lors du retour à Scripta, le répertoire de travail est toujours en DY au lieu de là où Scripta
Des idées sur la façon d'accomplir cela?
EDIT
Bonus si la solution peut également gérer le cas lors de l'exécution du script dans un sous-processus, à savoir Scripta:
#!/bin/bash
touch script_a_1.txt
source DY/ScriptB.sh
touch script_a_2.txt
DY/./ScriptC.sh
* également fixé l'exemple initial Scripta pas l'approvisionnement ScriptC
Tout nettoyer sauf que OP est sourcing au lieu de courir dans un sous-processus comme vous le montrez ici. Veuillez corriger (+1 de toute façon). –
@MadPhysicist Bon point, juste corrigé. – yinnonsanders
Fonctionne comme un charme. Y a-t-il des réserves à faire cela? – bitscuit