web-dev-qa-db-fra.com

Fichiers source dans un script bash

J'utilise deux versions de ROS l'une à côté de l'autre. Pour en utiliser un, je dois trouver des variables d’environnement pour la version en question. Je voudrais créer un script qui fait ceci. Mais si je crée un script comme ci-dessous, les variables ne sont pas définies, elles le sont probablement dans un sous-shell. Comment puis-je obtenir les fichiers dans le shell du terminal principal?

source.sh:

source /opt/ros/fuerte/setup.bash;
source  ~/fuerte_workspace/setup.bash;

Voici comment j'appelle source.sh:

./source.sh
# This does not echo anything, but I expect it should
echo $ros_config

Mise à jour: en recherchant source.sh comme suggéré dans la réponse, je peux maintenant voir les variables en cours de définition.

source ./source.sh
# This works now
echo $ros_config
45
user408041

Exécuter un script shell en utilisant. ./ (barre oblique)

Lors de l’exécution du script Shell à l’aide de “dot space dot slash”, comme indiqué ci-dessous, le script sera exécuté dans le shell en cours sans créer de correspondance.

$ . ./setup.bash

En d'autres termes, cela exécute les commandes spécifiées dans le setup.bash dans le shell actuel et prépare l'environnement pour vous.

80
MangeshBiradar

Utilisez la notation par points pour trouver la source dans le fichier de script dans le courant Shell, c.-à-d. sans créer de sous- Shell:

. /opt/ros/fuerte/setup.bash
. ~/fuerte_workspace/setup.bash
6
anubhava