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

API standards et tierces Java Discussion :

Récupérer une variable d'environnement sous MACOS


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2022
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2022
    Messages : 66
    Par défaut Récupérer une variable d'environnement sous MACOS
    Bonjour,

    Je travaille sous MACOS,

    J'ai créé le script "backup.sh" suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #!/bin/bash                            
     if [   -z $2 ]                        
        then echo "Il faut passer deux arguments
        exit 1;                            
    fi                                                                        
    base=$1                                
    fichier=$2                             
     
     /usr/local/mysql-9.2.0-macos15-x86_64/bin/mysqldump   -u gege   -B $base > $fichier
    et voici la méthode java qui invoque ce script (qui a son équivalent sous Windows "backup.bat"). .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
     public static int commandePourBase(String commande, String fichier, String msg)
        {
        	 try 
     	    {
        		 String appli = "";
     	    	if (OS_MAC) appli = commande+".sh"; 
     	    	else appli = commande+".bat"; 
     	    	String cmd   = userdir + File.separator + "Data"+ File.separator + appli;;
     			Path path  = Paths.get(cmd); 
     			if (! Files.exists(path))
     			{
     				  String mes =  "<html><body><font color=black>Sauvegarde/Restauration.<br>";
     				         mes += "Impossible de trouver le fichier d'exécution :</font><br><font color=red>"  + cmd + "</  font></body></html>";
     				 JOption Pane.showMessageDialog(ow,mes, "Erreur"  ,JOptionPane.INFORMATION_MESSAGE);
     				 return -1;
     			}
     			ProcessBuilder pb = null; 
     			if (commande.equalsIgnoreCase("backup"))
     	    	    pb = new ProcessBuilder(cmd,mabase,fichier); 
     			else
     			   pb = new ProcessBuilder(cmd,fichier); 
     	   	    Process proc  = pb.start();
     	         proc.waitFor(); 
     
     	        BufferedReader reader  = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
     
     	        System.out.println();
                     String line  =null;
     	        int rc = 0;
     	        while((line  = reader.readLine())!=null)
                    { 
            	   System.out.println("Erreur : "+line );
            	   rc=-1;
                    }
     	        return rc;
     	    } 
     	    catch (Exception e) 
     	    {
     	    	e.printStackTrace();
     	    	JOptionPane.showMessageDialog(null,msg + " de la base impossible","",JOptionPane.INFORMATION_MESSAGE);
     	    	return -1;
     	    }
        }
    jusque là tout marche bien, ma base est correctement sauvegardée. .

    Pour éviter de hard-coder le chemin du programme mysqldump dans mon script, j'ai à pensé à le remplacer par une variable d'environnement. Pour cela dans le fichier .zshenv j'ai ajouté la variable MYSQL_HOME. En mode terminal, cela marche très bien, mais pas sous java, j'obtiens un message d'erreur et je note que la variable d'environnement est remplacée par un blanc.

    J'ai alors modifié mon code java pour voir si je peux récupérer la valeur de cette variable et la passer en paramètre. J'ai donc utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String env = System.getenv("MYSQL_HOME")  // J'ai aussi essayé avec System.getenv("$MYSQL_HOME");
    Cela me renvoie env= null.

    Est-ce normal? Si oui, y-a-t-il une solution ?

    Merci d'avance.

    Gégé

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur en génie logiciel
    Inscrit en
    Juin 2012
    Messages
    973
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur en génie logiciel
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2012
    Messages : 973
    Par défaut
    La variable n'est pas définie dans l'environnement du processus Java?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo $MYSQL_HOME
    env | grep MYSQL_HOME
    sinon

    La variable est définie mais pas exportée?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    export MYSQL_HOME=/usr/local/mysql

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2022
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2022
    Messages : 66
    Par défaut
    Merci pour la réponse,

    Toutefois, la variable $MYSQL_HOME était bien définie et exportée.

    D'ailleurs lorsque j'exécute en mode terminal le script ci-dessous, cela fonctionne très bien. Par contre je ne sais pas ce qu'il faut ajouter/changer pour que cela marche aussi quand le script est exécuté d'une application Java.

    Je suis loin de dominer l'environnement MAC/UNIX et d'écrire des scripts en BASH car c'est mon premier script et je n'ai réussi à le faire tourner qu'après bien des essais et tâtonnements , car ayant l'habitude d'autres langages, je n'avais pas compris qu'il ne faut pas d'espaces entre le nom d'une variable et le signe =.

    Si vous avez des idées pour résoudre mon problème je suis preneur.

    Merci encore

    Gégé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #!/bin/bash
     if [   -z $2 ] 
        then echo "Il faut passer deux arguments  : le nom de la base et le nom du fichier "
        exit 1;
    fi
    base=$1
    fichier=$2
    echo $MYSQL_HOME 
      # env | grep MYSQL_HOME    // cette ligne n'a aucun effet. 
    myvar=$MYSQL_HOME 
    echo $myvar
    cmd="$myvar""/mysqldump";
    echo $cmd
    $cmd -u gege   -B $base > $fichier 
    exit

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2022
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2022
    Messages : 66
    Par défaut
    J'ai résolu mon problème. J'explique car cela peut servir à d'autres.

    Avant d'utiliser ma variable; Je force le chargement de la variable que j'ai défini dans .bash_profile.

    Encore merci.

    Gégé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #!/bin/bash
     if [   -z $2 ] 
        then echo "Il faut passer deux arguments  : le nom de la base et le nom du fichier "
        exit 1;
    fi
    
    source  ~/.bash_profile 
    
    base=$1
    fichier=$2
    myvar=$MYSQL_HOME 
    cmd="$myvar""/mysqldump";
    $cmd -u gege   -B $base > $fichier 
    exit

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Définir une variable d'environnement sous ubuntu
    Par sheura dans le forum Administration système
    Réponses: 6
    Dernier message: 24/03/2008, 11h17
  2. Réponses: 1
    Dernier message: 18/09/2007, 17h07
  3. NASM Tester une variable d'environnement à la "compilat
    Par Pierre Maurette dans le forum Assembleur
    Réponses: 1
    Dernier message: 10/06/2005, 14h27
  4. [BES] Création d'une variable d'environnement
    Par NGI80 dans le forum Autres
    Réponses: 2
    Dernier message: 17/10/2002, 08h31

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