#1 Le 25/01/2007, à 15:07
- CasseTaTele
variables d'environnement et script
Bonjour j'essayes d'écrire un script pour lancer un programme java.
Il me faut définir la variable d'environnement CLASSPATH qui pointe vers plusieurs répertoires et plusieurs '.jar' qui contiennent les classes utiles au programme.
Pour cela je définit la variable CLASSPATH avec la commande 'export' plusieurs fois en concatenant le chemin de chaque nouveau '.jar' séparé pas ':' mais à partir de 'base64.jar' la concatenation se fait mal et le nouveau chemin est écrit au début de la variable d'environnenment en écrasant les infos précédantes...
comment cela se fait il ?
voici mon script :
#! /bin/sh
echo -------------- script boot de Jade GUI -------------------------------
export JADE_LIB=/usr/lib/libjade
#/usr/lib/libjade -> /media/doris/georal/REPAIMTA/georal-06-08/ressources-lib/jade/lib/
echo JADE_LIB = $JADE_LIB
echo
export JAVA_PATH=/usr/lib/jvm/java-1.5.0-sun/bin
echo JAVA_PATH = $JAVA_PATH
echo
export PATH=$PATH:$JAVA_PATH
echo PATH = $PATH
echo
echo avant affectation
echo CLASSPATH = $CLASSPATH
echo JADE_LIB = $JADE_LIB
echo
echo -- jade.jar
export CLASSPATH=$JADE_LIB/jade.jar
echo $CLASSPATH
echo -- jadeTools.jar
export CLASSPATH=$CLASSPATH:$JADE_LIB/jadeTools.jar
echo $CLASSPATH
echo -- iiop.jar
export CLASSPATH=$CLASSPATH:$JADE_LIB/iiop.jar
echo $CLASSPATH
echo -- base64.jar
export CLASSPATH=$CLASSPATH:$JADE_LIB/base64.jar
echo $CLASSPATH
echo -- /src
export CLASSPATH=$CLASSPATH:$JADE_LIB/src
echo $CLASSPATH
echo après affectation
echo CLASSPATH = $CLASSPATH
echo
echo > Lancement de java
java jade.Boot -gui %1 %2 %3 %4 %5 %6 %7 %8 %9
echo ------------------ fin -----------------------------------------------
et voici le résultat de l'execution :
root@kern-44:~/prog/georal/scripts# ./bootjadegui
-------------- script boot de Jade GUI -------------------------------
JADE_LIB = /usr/lib/libjade
JAVA_PATH = /usr/lib/jvm/java-1.5.0-sun/bin
PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin:/usr/lib/jvm/java-1.5.0-sun/bin
avant affectation
CLASSPATH =
JADE_LIB = /usr/lib/libjade
-- jade.jar
/usr/lib/libjade/jade.jar
-- jadeTools.jar
/usr/lib/libjade/jade.jar:/usr/lib/libjade/jadeTools.jar
-- iiop.jar
/usr/lib/libjade/jade.jar:/usr/lib/libjade/jadeTools.jar:/usr/lib/libjade/iiop.jar
-- base64.jar
:/usr/lib/libjade/base64.jarsr/lib/libjade/jadeTools.jar:/usr/lib/libjade/iiop.jar
-- /src
:/usr/lib/libjade/base64.jar:/usr/lib/libjade/srcols.jar:/usr/lib/libjade/iiop.jar
après affectation
:/usr/lib/libjade/base64.jar:/usr/lib/libjade/srcbjade/jadeTools.jar:/usr/lib/libjade/iiop.jar
This is JADE 3.1 - 2003/12/17 13:40:15
downloaded in Open Source, under LGPL restrictions,
at http://jade.cselt.it/
Exception in thread "main" java.lang.NoClassDefFoundError: FIPA/MTS
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)
at jade.core.messaging.MessagingService$CommandTargetSink.installMTP(Unknown Source)
at jade.core.messaging.MessagingService$CommandTargetSink.handleInstallMTP(Unknown Source)
at jade.core.messaging.MessagingService$CommandTargetSink.consume(Unknown Source)
at jade.core.CommandProcessor.processIncoming(Unknown Source)
at jade.core.BaseNode.serve(Unknown Source)
at jade.core.BaseNode.serve(Unknown Source)
at jade.imtp.rmi.NodeRMIImpl.accept(Unknown Source)
at jade.imtp.rmi.NodeAdapter.accept(Unknown Source)
at jade.core.messaging.MessagingProxy.installMTP(Unknown Source)
at jade.core.messaging.MessagingService.boot(Unknown Source)
at jade.core.AgentContainerImpl.startBasicServices(Unknown Source)
at jade.core.AgentContainerImpl.joinPlatform(Unknown Source)
at jade.core.Runtime.createMainContainer(Unknown Source)
at jade.Boot.<init>(Unknown Source)
at jade.Boot.main(Unknown Source)
l'erreur java est (pour ainsi dire) normale car la variable CLASSPATH est mal définie, comment la définir correctement ?
on dirait que la variable ne peut pas exéder une ligne en taille, pourtant d'autres variables d'environnements sont beaucoups plus longues ...
Hors ligne
#2 Le 25/01/2007, à 15:10
- CasseTaTele
Re : variables d'environnement et script
oups en supprimant tous les espaces le problème est réglé ...
je trouve tout de meme bizarre que des espace puisse tout faire planter...
Un script bash est-il sensible aux espaces et sauts de lignes ?
Hors ligne
#3 Le 26/01/2007, à 00:07
- kaworu
Re : variables d'environnement et script
Salut !
Bash est sensible au espaces, oui et non. Les problèmes majeurs sont dans les affectation et test (si j'en oublie pas), mais une fois compris la logique, impossible de se tromper.
Tout fonctionne selon un shéma :
<programme> <arguments>
SAUF les déclaration de variables qui sont
<variable>=<valeur>
Si il y a un espace, bash pense que le 1er "mot" est la commande et les autres des arguments.
echo =12
j'appelle la commande "echo" avec "=12" comme argument, le résultat est donc l'affichage de "=12".
echo = 12
pareil, j'appelle "echo" avec "=" et "12" comme arguments.
echo=12
j'affecte "12" à la variable "echo". mainteant je dispose d'un variable $echo qui a comme valeur "12" (on peut le voir avec "echo $echo").
pour les test on fait souvent :
if [ blablabla ]; then ...
"[" est un programme ! Il faut donc toujours faire des constructions comme :
var=1
[ $var -eq 1 ] && echo "waaaa"
car comme cela on a le programme "[" appelé avec des arguments (et le dernier DOIT être un "]" sinon le programme "[" provoque une erreur). Si on fait sans espaces :
[$var -eq 1] && ...
on a une erreur, car le programme "[1" n'existe pas !
"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."
Hors ligne
#4 Le 26/01/2007, à 10:13
- CasseTaTele
Re : variables d'environnement et script
En fait j'ai meme pas de test a faire, c'est juste un petit script qui lance des programmes en java.
J'ai traduit ces scripts depuis un '.bat' qui lançait les memes programmes sous windows. J'ai bien respecté les espaces mais il devait y avoir des caractères (invisibles sous gedit) qui empechaient le script de fonctionner et qui provenaient sans doute de l'éditeur windows. Pour résoudre le probleme j'ai supprimé tous les sauts de lignes puis je les ai remis avec gedit.
Hors ligne
#5 Le 27/01/2007, à 12:42
- kaworu
Re : variables d'environnement et script
Salut !
C'est sûrement parce que sous Windows, les saut des lignes sont différents.
(voir ICI)
il y a les outils dos2unix et unix2dos qui te convertissent un fichier texte en remplaçant les saut des lignes unix par des sauts de lignes windows.
Autrement si tu n'as pas ces programmes sur la machine avec laquelle tu travail, tu peux faire :
Pour unix2dos
$ sed -e 's/$/\r/' myunix.txt > mydos.txt
pour dos2unix
$ sed -e 's/.$//' mydos.txt > myunix.txt
et si t'as pas sed ba... il te faut installer un vrai OS sur cette machine
"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."
Hors ligne
#6 Le 28/01/2007, à 13:54
- CasseTaTele
Hors ligne