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é