2014-05-24 4 views
0

Je suis confronté à un problème étrange, j'ai un programme Java qui appelle un script shell dans netbeans. Le script shell est supposé créer un fichier dans le même répertoire que le script. Mais dans ce cas, le fichier de sortie est créé dans le dossier netbeans (workflow). Quelqu'un peut-il me dire où je me trompe? Je ne peux pas changer le script car il est dynamique.La sortie Shell Script est dans un répertoire différent

Note: Si je lance la classe sur commande invite le fichier est créé dans le répertoire de script lui-même, problème est quand je lance dans NetBeans

apprécierais toute aide

+0

Pourriez-vous poster le code problématique? Cela me semble être un problème avec les chemins relatifs. – timgeb

Répondre

1

Utilisez ProcessBuilder et invoquez directory(File) pour définir le répertoire de travail approprié.

+0

Aussi simple que ça! Merci Tim qui a travaillé :) – Raaghu

0

Tenir compte le script suivant:

#!/bin/sh 
echo "hi" > hello.txt 

Lorsque ce script est exécuté, il va créer le fichier "hello.txt" dans le répertoire courant .

Alors, quel est le répertoire courant? Eh bien cela dépend de la façon dont vous exécutez le script.

  • Si vous exécutez simplement le script de l'invite du shell, le répertoire courant sera le répertoire courant du shell; c'est-à-dire où vous avez cd à. Si vous exécutez un programme Java et qu'il utilise Runtime.exec() pour exécuter le script, le répertoire actuel du script sera le répertoire en cours du programme Java.

  • Lorsqu'un programme Java est lancé à partir de l'invite de commande du shell (par exemple, java -cp ... SomeClass), son répertoire actuel est le répertoire actuel du shell. Lorsque vous lancez un programme Java à partir d'un IDE, le répertoire courant du programme Java est déterminé par le programme de lancement Java IDE. Il est courant pour les IDE (par exemple NetBeans, Eclipse) de faire du répertoire du projet le répertoire courant du programme Java lancé.


Voilà ce qui se passe. Que devriez-vous faire à ce propos?

  • Comme Tim Bender suggère, vous pouvez utiliser ProcessBuilder, et définir le répertoire en cours pour le processus de l'enfant dans le répertoire que vous voulez. Mais cela signifie que votre programme Java doit savoir quel est le bon répertoire.

  • Vous pouvez modifier le script pour utiliser un chemin absolu pour le fichier de sortie. Mais cela signifie que le bon répertoire doit être "câblé" dans le script. La meilleure solution (IMO) consiste à laisser seul le programme Java et le script, et à modifier la configuration du programme de lancement Java de l'EDI pour rendre le répertoire courant du programme lancé plus approprié (pour les tests).

  • Vous pouvez aussi faire du répertoire de sortie un argument de ligne de commande (ou une entrée de fichier de configuration) pour le programme Java ... et lui faire passer la valeur de l'argument au script shell.

Questions connexes