当前位置: 首页 > 知识库问答 >
问题:

从外部目录运行Shell脚本:没有这样的文件或目录

郝修为
2023-03-14

我有一个shell脚本文件,我想从java运行。我的java工作空间目录与脚本的目录不同。

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)

我在谷歌上搜索了一下,每一个解决方案都表明我在做正确的事情。

我试图把脚本文件放在src和Java项目的bin中,但它仍然说没有这样的文件或目录。

我做错了什么?

谢谢

共有2个答案

殳俊
2023-03-14

您应该执行< code > chmod 755/home/ke mallin/Desktop/clean . sh 并确保java进程在同一个userid下运行

漆雕绍晖
2023-03-14

您的程序<代码>干净。sh不是Java所理解的可执行文件,即使底层系统将其理解为可执行文件。

你需要告诉Java需要什么shell来执行你的命令。做(假设你正在使用bash并且它安装在/bin/bash):

private final String scriptPath = "/home/kemallin/Desktop/";

public void cleanCSVScript() {

    String script = "clean.sh";
    try {
        Process awk = new ProcessBuilder("/bin/bash", scriptPath + script).start();
        awk.waitFor();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
 类似资料:
  • 在转换到Swift3后,我刚刚解决了我的错误,但在尝试编译时却得到了这个错误。为了清晰起见,我附上了一张截图,它看起来不像是系统在寻找一个.app文件或.sh文件。真的不太了解豆荚,所以任何帮助都会非常感谢!

  • 问题内容: 我有几个运行良好的python脚本,但是如果我尝试从bash运行它,一个脚本(截至今天上午)开始给我这个错误: : 无此文件或目录 我可以通过运行“破损”脚本并四处查看后,发现我的总体思路是,我的hashbang的行尾已更改(无提示),因此我查看了工作脚本的行尾并通过VI中的选项破坏了脚本,如该问题所示->在文本文件中查看行尾 两个文件似乎都以相同的字符(a )结尾,因此我对如何从此处

  • 问题内容: 我在Windows中使用Code :: Blocks。 我创建了一个dll项目,试图获得一些JNI实践。 在javah生成的.h文件中,有#include jni.h,但是当我尝试对其进行编译时,它总是说jni.h:没有这样的文件或目录。 我认为这与classpath有关,但我不知道它是什么!可能是我必须更改Code :: Blocks的设置 有人可以帮我解决这个问题吗?非常感谢 编辑

  • 问题内容: 我从节点应用程序收到此错误: 我知道文件在那里,因为当我尝试使用确切的复制和粘贴路径打开文件时,它可以工作。我也知道应用程序使用的是正确的目录,因为它会在错误中输出它。 问题答案: 波浪形扩展是一件空壳的事情。编写正确的路径名(可能是yourusername )或使用

  • 问题内容: 我最近在运行Ubuntu 12.04 LTS的Macbook Pro上安装了用于C ++开发的KDevelop 4。 我想在我的C ++代码中嵌入Python应用程序。为此,需要包含Python.h头文件。所以,我做到了。 但是,在运行时,我从IDE收到以下响应: 但是,我很快就发现了问题。我还没有下载python- dev软件包。所以,我做到了。我又跑了一次,但同样的错误又出现了。因

  • 问题内容: 我在运行docker文件时收到来自docker的错误消息。就是说/ var / lib / docker / aufs / layers / xxxx:运行Docker build时没有这样的文件或目录。 我尝试了多种方法来删除容器和图像,因此我对此非常有兴趣。 任何 Docker文件为: 完整的控制台输出为: 编辑 @BMitchs的建议解决了该问题: rm -rf / var /