Exécuter un script dans le même répertoire que le script courant
J'ai deux scripts Bash dans le même dossier (enregistré quelque part par l'utilisateur qui télécharge l'ensemble du référentiel):
-
script.sh
est exécuté par l'utilisateur -
{[1] } est requis et exécuté par
script.sh
, Les deux scripts doivent être dans le même répertoire. J'ai besoin du premier script pour appeler le second, mais il y a deux problèmes:
- connaître le répertoire de travail actuel m'est inutile, car je ne sais pas comment l'utilisateur exécute le premier script (peut-être avec
/usr/bin/script.sh
, avec./script.sh
, ou il pourrait être avec../Downloads/repo/scr/script.sh
) - le script
script.sh
va changer de répertoire avant d'appelerhelper.sh
.
Je peux certainement pirater ensemble Bash qui le fait en stockant le répertoire courant dans une variable, mais ce code semble inutilement compliqué pour ce que j'imagine est une tâche très commune et simple.
Existe-t-il un moyen standard de de manière fiable appeler helper.sh
depuis script.sh
? Et travaillera dans n'importe quel Bash-système d'exploitation pris en charge?
1 réponses
Depuis $0
détient le chemin complet du script en cours d'exécution, vous pouvez utiliser dirname
pour obtenir le chemin d'accès du script:
#!/bin/bash
script_name=$0
script_full_path=$(dirname "$0")
echo "script_name: $script_name"
echo "full path: $script_full_path"
Donc, si vous le stockez par exemple dans /tmp/a.sh
, vous verrez une sortie comme:
$ /tmp/a.sh
script_name: /tmp/a.sh
full path: /tmp
Donc
- connaître le répertoire de travail actuel est inutile pour moi, car je ne sais pas comment l'utilisateur exécute le premier script (pourrait être avec
/usr/bin/script.sh
, avec./script.sh
, ou il pourrait être avec../Downloads/repo/scr/script.sh
)
L'utilisation de dirname "$0"
vous permettra de garder une trace du chemin d'origine.
- le script
script.sh
va changer de répertoire avant d'appelerhelper.sh
.
Encore une fois, puisque vous avez le chemin dans $0
Vous pouvez cd
y revenir.