IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Variable d'environnement : mon script vs .bashrc


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut Variable d'environnement : mon script vs .bashrc
    Bonjour,
    Je cherche à faire la variable d'env VPSNoIP avec le script suivant.
    Mais source /home/toto/.bashrc ne fonctionne pas dans le script c'est pourquoi je suis obligé de rajouter VPSNoIP=$varVPSNoIP.
    Et quand le script est terminé donc hors script, je fais echo $VPSNoIP qui est vide. Il faut que je fasse un arrêt/relance du terminal pour qu'il renvoie la valeur.
    C'est normal que la commande source ne fonctionne pas dans mon cas ?
    Elle est inutile dans mon script, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    read varVPSNoIP
    echo "export VPSNoIP=$varVPSNoIP" >> /home/toto/.bashrc
    source /home/toto/.bashrc
    VPSNoIP=$varVPSNoIP
    scp -P 22 /home/toto/scripts.zip root@$VPSNoIP:/root
    Pouvez-vous m'apportez votre expertise sur ce point svp ?

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    il faut nous expliquer la démarche de ton script, parce que je ne vois pas l'intérêt du source, ni celle de modifier ~/.bashrc.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre éprouvé Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 346
    Points : 977
    Points
    977
    Par défaut
    Citation Envoyé par BEEP-BEEP Voir le message
    Mais source /home/toto/.bashrc ne fonctionne pas dans le script […] Elle est inutile dans mon script, non ?
    Ce sourçage est effectivement inutile, mais il devrait fonctionner, si c'est bien bash qui interprète le script : as-tu un message d'erreur ? si oui, qu'est-ce que tu as mis comme première ligne du script ? comment l'exécutes-tu ?
    Citation Envoyé par BEEP-BEEP Voir le message
    Et quand le script est terminé donc hors script, je fais echo $VPSNoIP qui est vide. Il faut que je fasse un arrêt/relance du terminal pour qu'il renvoie la valeur.
    Ça c'est normal : l'export ne se fait que vers les processus enfants, or quand tu sors du script, tu reviens vers le processus parent.

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    source est un bashisme, si le script n'était pas exécuté par bash, le shell afficherait une erreur.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Je modifie le .bashrc pour y mettre ma variable d'env afin qu'elle soit pérenne après arrêt/relance du terminal. Bref, pour qu'elle soit une vrai variable d'environnement
    J'utilise source, afin que la prise en compte soit immédiate. Mais je ne sais pas si je fais bien.
    Je ne sais pas si c'est bash qui interprète le script et je n'ai pas de message d'erreur.
    En première ligne du script j'ai mis ca au piffe : Je l'exécute comme cela : ./mon_script

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    je me demande si je voudrais vraiment sourcer tout mon ~/.bashrc pour fournir une petite variable à mon script...

    soit j'ai un fichier annexe (comme de simple fichier de données, ou un fichier de conf, que je mets à jour, ou que j'écrase),
    soit je modifie le script lui-même (sed 's/^maVar=/&nouvelleDonnée/' "$0", en gros).

    Citation Envoyé par BEEP-BEEP
    j'ai mis ça au pif


    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    1)
    sourcer tout mon ~/.bashrc :
    Je ne sais pas ce que cela veut vraiment dire, ni avec quelles conséquences.
    Je l'utilise juste pour une prise en compte de ma var immédiatement en environnement

    2)
    soit j'ai un fichier annexe (comme de simple fichier de données, ou un fichier de conf, que je mets à jour, ou que j'écrase):
    Désolé mais je ne comprends pas dans ce cas la mise en oeuvre afin que ma var d'env soit pérenne après arrêt/relance du terminal ?

    3)
    soit je modifie le script lui-même (sed 's/^maVar=/&nouvelleDonnée/' "$0", en gros)
    Je ne comprends pas cette alternative : ^, &, $0...tu m'as perdu. Ca fait quoi ?

    4) Je ne sais pas comment on détermine ce qu'il faut mettre en première ligne...

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    1- est-ce que tu as besoin de cette variable en dehors de ce script ?

    2-
    je ne sais pas
    je ne comprends pas
    tu peux te renseigner via les liens dans ma signature.
    si ça reste vague, dis-nous ce que tu as compris, et/ou on approfondira/corrigera.

    3- $0 c'est l'argument n°0 du shell : le chemin et le nom du script.
    le sed effectue une simple substitution.

    4- ton shebang (cf. le point n°2 de ce message) est mal formé.
    le #! indique qu'il ne s'agit pas seulement d'un commentaire, mais que ce qui suit est le chemin et le nom de l'interpréteur.

    --

    mais, avant d'aller plus loin, réponds au premier point de ce message.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    sourcer tout mon ~/.bashrc
    Je souhaites avoir un fichier dans lequel toutes mes variables sont définies.
    Toutes ces variables doivent être accessible dans un terminal dès que j'ouvre ce terminal.
    Ces variables et leurs valeurs doivent être accessible dans tous mes scripts.
    Ainsi, lorsque je dois changer la valeur d'une variable, que j'aille dans ce fichier de variable afin de changer sa valeur.
    Par exemple : un fichier "mes_variables.??" que je souhaites à l'identique sur mon PC et mon VPS.
    Ainsi je peux modifier une variable dans ce fichier sur mon PC et transférer ce fichier sur mon VPS.
    Et sur mon VPS, les variables de mon fichier doivent être accessible de la même manière, mais pour tous les utilisateurs notamment root et toto.
    Mais en attendant, j'ai donc trouver cette solution d'utiliser .bashrc sur mon PC et ../etc/bash.bashrc sur mon VPS
    Voilà N_bah dans l'idéal.

    2)
    soit j'ai un fichier annexe (comme de simple fichier de données, ou un fichier de conf, que je mets à jour, ou que j'écrase):
    C'est peut-être la solution pour moi. Ce fichier contiendrait que des lignes du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    export USERPUBKEY=\"$varUSERPUBKEY\"
    Mais comment faire pour qu'il soit pris en compte à l'instar de .bashrc ?
    Car faire un appel du fichierdeconf.txt avec la commande source dans chaque script, je ne trouve pas cela génial par rapport à mon besoin (https://www.it-connect.fr/un-fichier...-scripts-bash/)
    Fichier de donnée ou fichier de conf ? comment mettre en oeuvre un fichier de conf ? la différence ?


    3)
    soit je modifie le script lui-même (sed 's/^maVar=/&nouvelleDonnée/' "$0", en gros)
    Ok, donc dans le cas d'une simple substitution dans mon script...

    4)je vais mettre cela plutôt : #!/bin/bash

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    on va faire le contraire :
    créer un fichier qui contient toutes tes variables utiles (~/.varUtiles.vps)
    sourcer ~/.varUtiles.vps dans ~/.bashrc, ainsi les variables seront disponibles dans le terminal
    et
    sourcer ce même ~/.varUtiles.vps dans les scripts qui en ont besoin.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Et dans ce cas, pour éviter d'avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     source ~/.varUtiles.vps
    dans mes scripts qui en ont besoin.
    Je peux exporter mes variables dans ~/.varUtiles.vps qui est dans ~/.bashrc de cette manière non ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    export USERPUBKEY=\"$varUSERPUBKEY\"
    Cela revient au même, non ?

  12. #12
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    non, parce que ~/.bashrc n'est pas lu lors de l'exécution des scripts,
    et il n'y a pas lieu d'exécuter la totalité de ~/.bashrc dans un script.

    tout ce que définit ~/;bashrc n'est pas commun au terminal ET aux scripts
    alors que
    tout ce que définit ~/.varUtiles.vps est bien commun au terminal ET aux scripts
    c'est donc bien ce fichier qu'il faut sourcer dans les deux environnements.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    1)
    non, parce que ~/.bashrc n'est pas lu lors de l'exécution des scripts,
    .bashrc est lu seulement lorsque j'ouvre terminal pour exécuter mon script manuellement, dans ce cas pas de problème.
    Mettre par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    export USERPUBKEY=\"$varUSERPUBKEY\"
    dans ~/.varUtiles.vps qui est sourcé dans ~/.bashrc, ca va !
    Et pas besoin de sourcer dans les scripts !
    Par contre, le problème avec cette manière de faire est que mes variables d'environnement ne seront définies que dans mes scripts lancés via le terminal, mais pas dans mes scripts exécutés d'une autre manière comme directement avec une icône ou un menu ou un raccourci clavier.
    Est-ce que j'ai bien compris ?

    Donc ta méthode
    sourcer ~/.varUtiles.vps dans ~/.bashrc, ainsi les variables seront disponibles dans le terminal
    => mes var dispo dans le terminal mais aussi lors d'éxécution de mes scripts manuellement dans le terminal, sans besoin du sourcing dans chaque script.
    et sourcer ce même ~/.varUtiles.vps dans les scripts qui en ont besoin.
    => mes var seront définies dans tous les cas de figures de lancement de mes scripts.

    C'est OK ???

    2) Définition d'alias :
    J'ai un script manuel qui définit des alias dans .bash_aliases.
    Je souhaites que ces alias soit tout de suite dispo à la fin de l'éxécution du script sans devoir faire une fermeture et réouverture du terminal pour lecture de .bash_aliases et donc prise en compte.
    Existe-t-il stp une commande à mettre en fin de mon script ayant l'effet de "fermeture et réouverture du terminal" ?

    Encore merci pour ta disponibilité et tes réponses ;-)

  14. #14
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    1- d'accord.
    pour une exécution par clic (beurk!), tu peux vérifier si la variable existe, sinon sourcer le fichier qui les définit.

    2- non. à part sourcer le script dans le terminal, mais je ne recommande pas cette méthode : ce n'est pas le rôle d'un exécutable d'être sourcé.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  15. #15
    Membre éprouvé Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 346
    Points : 977
    Points
    977
    Par défaut
    Citation Envoyé par BEEP-BEEP Voir le message
    Par contre, le problème avec cette manière de faire est que mes variables d'environnement ne seront définies que dans mes scripts lancés via le terminal, mais pas dans mes scripts exécutés d'une autre manière comme directement avec une icône ou un menu ou un raccourci clavier.
    Pour ça, il faut que tu mettes tes exports dans ~/.profile : ils seront alors actifs dès l'ouverture de ta session, et donc pour tout shell lancé ensuite, interactivement ou non.
    Bien sûr, si tes exports changent à chaque session pour la session en cours, ça ne servira pas à grand chose

  16. #16
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    1- d'accord.
    pour une exécution par clic (beurk!), tu peux vérifier si la variable existe, sinon sourcer le fichier qui les définit.

    2- non. à part sourcer le script dans le terminal, mais je ne recommande pas cette méthode : ce n'est pas le rôle d'un exécutable d'être sourcé.
    Oui, parce que le sourcer dans ./bashrc revient à lancer l'exécution du script dès l'ouverture de terminal, ce que je ne souhaites pas non plus.
    Je vais simplement me contenter d'ajouter un echo "Arrêter et relancer Terminal" à la fin de mon script ;-)

    Merci N_bah

  17. #17
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par balkany Voir le message
    Pour ça, il faut que tu mettes tes exports dans ~/.profile : ils seront alors actifs dès l'ouverture de ta session, et donc pour tout shell lancé ensuite, interactivement ou non.
    Bien sûr, si tes exports changent à chaque session pour la session en cours, ça ne servira pas à grand chose
    Je ne comprends pas ta dernière phrase Balkany ?

  18. #18
    Membre éprouvé Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 346
    Points : 977
    Points
    977
    Par défaut
    Eh bien si un export var='val' est fait à l'entrée de session, mais que cette valeur val devient obsolète en cours de session, ça n'est pas parce que tu mettras à jour le ~/.profile avec export var='new_val' que l'export initial sera mis à jour.
    Tous les shells que tu ouvriras dans cette même session continueront d'être initialisés avec var='val' (à moins bien sûr d'être fils d'un shell ou le nouvel export a été fait manuellement).
    Je ne sais pas si c'est plus clair…

  19. #19
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2020
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    @Balkany parfaitement clair, il faudra dans ce cas sortir de la session et y réentrer afin que newval soit pris en compte.
    merci ;-)

  20. #20
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 550
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    mais... il n'y a que des adresses de VPS à entretenir ?
    alors, tu pourrais peut-être maintenir /etc/hosts à jour, non ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Python 2.X] Lire et utiliser fichier contenant variable d'environnement dans script Python
    Par ptonnerre dans le forum Général Python
    Réponses: 1
    Dernier message: 05/12/2015, 18h57
  2. Récupération d'une variable PHP dans mon script JS
    Par dojbouli dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/04/2013, 12h52
  3. Script variable d'environnement système
    Par popinenhbourg dans le forum Windows
    Réponses: 8
    Dernier message: 19/07/2007, 17h51
  4. changer une variable d'environnement a partir d'un script
    Par doomxl dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 28/06/2007, 13h08
  5. Réponses: 1
    Dernier message: 11/01/2007, 15h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo