Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/01/2007, à 16: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, à 16: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, à 01: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, à 11: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, à 13: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 wink


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#6 Le 28/01/2007, à 14:54

CasseTaTele

Re : variables d'environnement et script

merci je materai ça

Hors ligne