"lancer un script" vs "sourcer un script"
Lamy
-
jklm -
jklm -
Bonjour,
Je me pose la question de la différence entre "lancer" un script et "sourcer" un script :
c'est à dire, par exemple, pour un script (exécutable par "user") action.ksh, la différence entre :
user$action.ksh et
user$. action.ksh
Mon script en question fait une surcharge de variables d'environnement par une série de "export" : par exemple export VERSION_ORACLE="10.2.0.4"
ce script est ensuite appellé par de nombreux scripts or il fonctionne en le "sourçant" (. action.ksh) mais pas en l'appelant (action.ksh), pourquoi ? Quelle est la différence ?
J'ai aussi remarqué que lorsque le script qui l'appelle est lui-même "sourcé" par un script appelant (toto.ksh contient la ligne ". titi.ksh", et titi.ksh contient la ligne ". action.ksh") l'exécution est brutalement stoppée sans aucun message d'erreur.
Quelqu'un peut-il m'initier à ces subtilités ?
Merci.
Je me pose la question de la différence entre "lancer" un script et "sourcer" un script :
c'est à dire, par exemple, pour un script (exécutable par "user") action.ksh, la différence entre :
user$action.ksh et
user$. action.ksh
Mon script en question fait une surcharge de variables d'environnement par une série de "export" : par exemple export VERSION_ORACLE="10.2.0.4"
ce script est ensuite appellé par de nombreux scripts or il fonctionne en le "sourçant" (. action.ksh) mais pas en l'appelant (action.ksh), pourquoi ? Quelle est la différence ?
J'ai aussi remarqué que lorsque le script qui l'appelle est lui-même "sourcé" par un script appelant (toto.ksh contient la ligne ". titi.ksh", et titi.ksh contient la ligne ". action.ksh") l'exécution est brutalement stoppée sans aucun message d'erreur.
Quelqu'un peut-il m'initier à ces subtilités ?
Merci.
A voir également:
- Script les visiteurs pdf
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Script vidéo youtube - Guide
- Save as pdf office 2007 - Télécharger - Bureautique
- Télécharger dictionnaire larousse pdf gratuit - Télécharger - Dictionnaires & Langues
- Toutes les formules mathématiques pdf - Télécharger - Études & Formations
3 réponses
Salut,
Quand tu lances un script par :
Le script est lancé dans un sous shell (appelé communément shell fils), dont les seules variables reconnues seront celles définies à l'intérieur du script, d'où l'intérêt de sourcer un fichier contenant des variables que l'on veut inclure dans notre nouvel environnement.
Quand tu lances un script en le sourçant :
En fait tu le lances en restant dans l'environnement du shell initial (shell père) sans créer de nouveau processus. Tout changement apporté à une variable sera répercuté dans l'environnement du shell courant (shell père). De même une commande comme "exit" dans le fichier "sourcé" aura des répercussions sur le shell où tu te trouves et devrait mettre fin à son processus en quittant le shell ;-\
Quand tu lances un script par :
./mon_script.sh ou (si le répertoire contenant le script est dans la variable $PATH) mon_script.sh
Le script est lancé dans un sous shell (appelé communément shell fils), dont les seules variables reconnues seront celles définies à l'intérieur du script, d'où l'intérêt de sourcer un fichier contenant des variables que l'on veut inclure dans notre nouvel environnement.
Quand tu lances un script en le sourçant :
. le_script
En fait tu le lances en restant dans l'environnement du shell initial (shell père) sans créer de nouveau processus. Tout changement apporté à une variable sera répercuté dans l'environnement du shell courant (shell père). De même une commande comme "exit" dans le fichier "sourcé" aura des répercussions sur le shell où tu te trouves et devrait mettre fin à son processus en quittant le shell ;-\
jklm
merci c'est clair.
Merci, c'est clair.
Pourquoi alors : (pour reprendre mon exemple toto>titi>action)
Quand "titi" source "action" : ça marche, sauf arrtêt brutal quand j'ajoute ces lignes dans "action" :
export VERSION_ORACLE="10.2.0.4"
export ORACLE_HOME=$ORACLE_BASE/${VERSION_ORACLE}
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export PATH=/bin:/usr/bin:/etc:/usr/lbin:/usr/ccs/bin:/usr/bin/X11:/usr/local/bin:/apps/oracle/10.2.0.4/bin:/apps/safewatch:/home/mqm
/SHINE:/usr/java14/jre/bin::/apps/cft/filexe:/apps/cft/filusr:/apps/cft/filexit:/apps/cft/filapi:/usr/bin:/etc:/usr/sbin:/usr/ucb:/us
r/bin/X11:/sbin:/usr/lpp/mqm/bin:/usr/lpp/mqm/samp/bin:.:/apps/safewatch/current/outils/cmd:/apps/safewatch/current/outils/bin:/apps/
safewatch/current/adm/cmd:/usr/mqm/samp/bin:/apps/cft/filexe:/apps/cft/filusr:/apps/cft/filexit:/apps/cft/filapi:/apps/cft/ifcft
export LIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:$ORACLE_HOME/precomp/public
export TNS_ADMIN=$ORACLE_BASE/adm/network
Alors que quand "titi" lance "action" (même avec les lignes) sans le sourcer, ça marche (sauf que les variables ne sont pas définies globalement, évidemment).
Y a-t-il dans les lignes ajoutées quelque chose de spécial qui le fasse planter ?
Pourquoi alors : (pour reprendre mon exemple toto>titi>action)
Quand "titi" source "action" : ça marche, sauf arrtêt brutal quand j'ajoute ces lignes dans "action" :
export VERSION_ORACLE="10.2.0.4"
export ORACLE_HOME=$ORACLE_BASE/${VERSION_ORACLE}
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
export PATH=/bin:/usr/bin:/etc:/usr/lbin:/usr/ccs/bin:/usr/bin/X11:/usr/local/bin:/apps/oracle/10.2.0.4/bin:/apps/safewatch:/home/mqm
/SHINE:/usr/java14/jre/bin::/apps/cft/filexe:/apps/cft/filusr:/apps/cft/filexit:/apps/cft/filapi:/usr/bin:/etc:/usr/sbin:/usr/ucb:/us
r/bin/X11:/sbin:/usr/lpp/mqm/bin:/usr/lpp/mqm/samp/bin:.:/apps/safewatch/current/outils/cmd:/apps/safewatch/current/outils/bin:/apps/
safewatch/current/adm/cmd:/usr/mqm/samp/bin:/apps/cft/filexe:/apps/cft/filusr:/apps/cft/filexit:/apps/cft/filapi:/apps/cft/ifcft
export LIBPATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:$ORACLE_HOME/precomp/public
export TNS_ADMIN=$ORACLE_BASE/adm/network
Alors que quand "titi" lance "action" (même avec les lignes) sans le sourcer, ça marche (sauf que les variables ne sont pas définies globalement, évidemment).
Y a-t-il dans les lignes ajoutées quelque chose de spécial qui le fasse planter ?