我有一个shell脚本文件,我想从java运行。我的java工作空间目录不同于脚本的目录。从外部目录运行Shell脚本:没有这样的文件或目录
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();
}
}
和我得到这个错误:
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)
我用Google搜索它,每一个解决方案几乎表明,我做了正确的事情。
我试图把脚本文件放在src和Java项目的bin中,但它仍然说没有这样的文件或目录。
我到底做错了什么?
谢谢。
Java的尝试运行整个命令行下运行一个命令。字符串“cat/home/...”不是程序,“猫”是,而其余的是猫的参数。 – 2014-09-03 15:19:41
Marc B可能是对的,我不是一个java人,所以我可能会做的是检查'/ home/kemallin/Desktop/capture-03.csv'和'/ home/kemallin/Desktop/clean.sh'。确保运行java程序的用户可以访问这些文件(a + rwx,如果你只是想放弃权限问题......如果是,那么你可以从那里工作) – 2014-09-03 15:27:59
我认为你的错误输出不符合显示的java代码。在Java代码中,运行的命令应该是“/home/kemallin/Desktop/clean.sh”,但在错误输出中显示“cat /home/kemallin/Desktop/capture-03.csv | awk ...”和“/home/kemallin/Desktop/clean.csv”:( – Jdamian 2014-09-03 15:42:15