2009-07-28 8 views
0

J'ai un script CLI java qui convertit les noms rgb en hexcodes (par exemple 144 132 146 devient # 908492). Cependant, je veux être capable de l'exécuter à partir de n'importe quel terminal. Je mets un script bash dans le même dossier afin qu'il puisse exécuter le fichier:bash: Exécuter un autre programme dans le répertoire courant en cours d'exécution à partir du chemin

Le script bash est assez simple, il suffit:

#!/bin/bash 
java rgb2hexConv $1 $2 $3 

Cependant, quand je lance le code à travers le chemin, je reçois des erreurs lié au fichier rgb2hexConv n'étant pas trouvé.

Schéma:

/ 
    /home/ 
    /home/me/ 
     /home/me/someRandomDir/ (running from here does not work) 
     /home/me/utils/ (in path) (running from here works) 
     - rgb2hex (bash script) 
     - rgb2hexConv.class (java program) 

Je pense qu'il cherche rgb2hexConv dans/home/moi/someRandomDir/par opposition à/home/moi/utils /. Est-il possible d'obtenir le répertoire du script bash?

EDIT: Modification du script pour utiliser ./rgb2hexConv donne les éléments suivants:

Exception in thread "main" java.lang.NoClassDefFoundError: //rgb2hexConv 
Caused by: java.lang.ClassNotFoundException: ..rgb2hexConv 
// long stack trace removed 
Could not find the main class: ./rgb2hexConv. Program will exit. 

(Le bit à la fin de la première ligne n'est pas un commentaire, mais la production réelle)

EDIT 2 : Après une tentative à l'aide de $ 0, la sortie suivante a été recieved

Exception dans le thread "principal" java.lang.NoClassDefFoundError:/home/moi/utils/rgb2hex/rgb2hexConv causée par: java.lang.ClassNotFoundException: .home .me.utils.rgb2hex.rgb2hexConv // Long Stack Trace Impossible de trouver la classe principale:/home/me/utils/rgb2hex/rgb2hexConv. Le programme va sortir.

Deux choses à ce sujet:

  1. $ 0 contient le nom du fichier ainsi qu'un répertoire
  2. La commande java semble remplacer «/» par « ». La variable

Répondre

2

$0 contient le chemin d'accès complet au fichier. Donc, ce qui suit devrait fonctionner:

java -cp $(dirname $0) rgb2hexConv $1 $2 $3 

-cp a été ajoutée par suggestion de Macha.

+0

$ 0 comprend le nom de fichier complet ainsi que le dir. – Macha

+0

Merci de l'avoir signalé. Je l'ai corrigé. –

+0

J'ai essayé ça et ça n'a pas marché. J'ai donc recherché les docs pour la commande java et cela ne fonctionne que pour le répertoire courant. Si vous voulez utiliser un répertoire différent, vous devez le dire en utilisant l'argument -cp. – Macha

0

L'amendement suivant fixé il:

#!/bin/bash 
java -cp $(dirname $0) rgb2hexConv $1 $2 $3 

Il semble que vous avez besoin de l'-cp modifier on the java command pour lui dire de rechercher certains répertoires. Et vous devez utiliser dirname pour obtenir le répertoire de $0

Questions connexes