L'exécution d'un Script Shell De Répertoire Externe: Aucun fichier ou répertoire
J'ai un script shell fichiers que je veux courir à partir de java. Mon java de l'espace de travail de répertoire est différent de celui du script d'annuaire.
private final String scriptPath = "/home/kemallin/Desktop/";
public void cleanCSVScript() {
String script = "clean.sh";
try {
Process awk = new ProcessBuilder(scriptPath + script).start();
awk.waitFor();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
et j'obtiens cette erreur:
java.io.IOException: Cannot run program "cat /home/kemallin/Desktop/capture-03.csv | awk -F ',' '{ print $1,",", $2,",", $3,",", $4,",", $6}' > clean.csv": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)
at ShellScript.cleanCSVScript(ShellScript.java:21)
at Main.main(Main.java:15)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:186)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028)
... 2 more
java.io.FileNotFoundException: /home/kemallin/Desktop/clean.csv (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at java.io.FileInputStream.<init>(FileInputStream.java:101)
at java.io.FileReader.<init>(FileReader.java:58)
at CSVReader.run(CSVReader.java:25)
at Main.main(Main.java:17)
J'ai googlé et chaque solution assez bien indiquer que je suis en train de faire la bonne chose.
J'ai essayé de mettre le fichier de script dans le répertoire src et dans la corbeille du projet en Java mais il dit aucun fichier ou dir.
Ce que je fais mal?
Grâce.
java est d'essayer d'exécuter l'ENSEMBLE de votre ligne de commande en une seule commande. La chaîne
Marc B est probablement vrai, et je ne suis pas un java mec, alors que je serais probablement faire est de vérifier les autorisations pour
Je pense que votre erreur de sortie ne correspond pas au code java montré. Dans le code Java de l'exécution de la commande "/home/kemallin/Desktop/clean.sh" mais dans la sortie d'erreur apparaît "cat /home/kemallin/Desktop/capture-03.csv | awk..." et "/home/kemallin/Desktop/nettoyer.csv" 🙁
alors, que proposez-vous? Que je devrais briser le script shell?
clean.sh a 755, l'utilisateur qui exécute le programme java est propriétaire de l'clean.sh l'accès ne devrait pas être un problème, est-ce exact?
cat /home/...
n'est pas un programme, cat
est, et le reste est un argument pour le chat.Marc B est probablement vrai, et je ne suis pas un java mec, alors que je serais probablement faire est de vérifier les autorisations pour
/home/kemallin/Desktop/capture-03.csv
et /home/kemallin/Desktop/clean.sh
. Assurez-vous que l'utilisateur qui exécute le programme java d'avoir accès à ces fichiers (a+rwx si vous voulez juste jeter un problème d'autorisations... si c'est le cas, alors vous pouvez travailler à partir de là)Je pense que votre erreur de sortie ne correspond pas au code java montré. Dans le code Java de l'exécution de la commande "/home/kemallin/Desktop/clean.sh" mais dans la sortie d'erreur apparaît "cat /home/kemallin/Desktop/capture-03.csv | awk..." et "/home/kemallin/Desktop/nettoyer.csv" 🙁
alors, que proposez-vous? Que je devrais briser le script shell?
clean.sh a 755, l'utilisateur qui exécute le programme java est propriétaire de l'clean.sh l'accès ne devrait pas être un problème, est-ce exact?
OriginalL'auteur ickarsim | 2014-09-03
Vous devez vous connecter pour publier un commentaire.
Votre programme
clean.sh
n'est pas un exécutable Java le comprend, même si le système sous-jacent, il comprend que l'exécutable.Vous devez dire à Java que shell est nécessaire pour l'exécution de votre commande. Faire (en supposant que vous utilisez
bash
et il est installé à/bin/bash
):Mon erreur c'fixe entièrement.
OriginalL'auteur David P. Caldwell
Vous devriez faire un
chmod 755 /home/kemallin/Desktop/clean.sh
et d'assurer le processus java est exécuté sous le même nom d'utilisateurOriginalL'auteur Romeo Kienzler