Bonjour,
Je travaille sous MACOS,
J'ai créé le script "backup.sh" suivant :
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 #!/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
jusque là tout marche bien, ma base est correctement sauvegardée. .
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; } }
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é :
Cela me renvoie env= null.
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");
Est-ce normal? Si oui, y-a-t-il une solution ?
Merci d'avance.
Gégé








Répondre avec citation
Partager