gpt4 book ai didi

java - 使用 java 代码和 cygwin 在 Windows 环境中调用 shell 脚本时出错...!

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:53:44 25 4
gpt4 key购买 nike

我想在 windows 环境下使用 java 代码调用 shell 脚本。我正在尝试执行下面的代码来运行我的测试脚本(不是实际脚本):

Java 代码:

public static void main (String args[]) {
Runtime r = Runtime.getRuntime();
try {
Process p = r.exec("C:\\cygwin\\bin\\bash -c '/cygdrive/d/scripts/test.sh'");
InputStream in = p.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
System.out.println("OUT:");
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}

in = p.getErrorStream();
br = new BufferedReader(new InputStreamReader(in));
System.out.println("ERR:");
while ((line = br.readLine()) != null) {
System.out.println(line);
}

p.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}

测试.sh

#!/bin/bash

rm -rf ./test

但我收到这些错误,脚本无法删除目录。

错误:/cygdrive/d/ereader/scripts/test.sh:第 2 行:$'\r':找不到命令/cygdrive/d/ereader/scripts/test.sh:第 3 行:rm:找不到命令

另一件事,当我从 cygwin 终端运行脚本时,它工作正常。我检查了路径变量,它们都很好。但是我尝试通过它给出错误的 java 代码执行相同的脚本..

现在如何告诉 java 程序在哪里引用 rm 命令?

最佳答案

赠品是“\r”错误。

Windows 和 Unix(包括 Mac 和 Linux)使用不同的换行表示法。 Windows 使用 '\r\n' 而 Unix 只使用 '\n'。大多数编程编辑器都会考虑到这一点,并且只插入一个“\n”以便他们使用 Unix 工具。

我建议在另一个编辑器中重新键入您的 shell 脚本,例如 Notepad++(它只插入 '\n'),或者确保您当前的编辑器设置为使用 Unix 换行符。您必须重新键入它,否则错误的 '\r\n' 序列将被复制过来。您可能会幸运地进行全部替换,但这对我来说总是很不稳定。

关于java - 使用 java 代码和 cygwin 在 Windows 环境中调用 shell 脚本时出错...!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9852202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com