gpt4 book ai didi

java - 运行位于服务器上并映射为 U ://dirver on windows from windows in java application? 的 unix shell 脚本

转载 作者:可可西里 更新时间:2023-11-01 12:01:32 25 4
gpt4 key购买 nike

当我运行 runShellScript(unixCommand); 时出现以下错误:sh.exe 已停止工作。谁能告诉我问题是什么以及如何解决?

#!/bin/sh
# this assumes webserver is running on port 8080
echo "Deploy everything first"
echo "These next 3 should work..."
echo "The rest of these should fail... (nicely of course)"
echo "This should work but print debug info on the client and server"
# Now undeploy everything

String unixCommand = "sh U:\\home\\ash\\test.sh";
try {
runShellScript(unixCommand);
} catch (IOException e1) {
e1.printStackTrace();
} catch (InterruptedException e1) {
e1.printStackTrace();
}



public static void runShellScript(String unixCommand) throws IOException, InterruptedException {
ProcessBuilder processBuilder = new ProcessBuilder("bash", "-c", unixCommand);
processBuilder.redirectErrorStream(true);
Process shellProcess = processBuilder.start();
InputStream inputStream = shellProcess.getInputStream();
int consoleDisplay;
while ((consoleDisplay = inputStream.read()) != -1) {
System.out.println(consoleDisplay);
}
try {
inputStream.close();
} catch (IOException iOException) {
}
}

最佳答案

这里有两个问题。

首先,Rekin 很好问你是否在使用 Cygwin,因为那是高度相关的。 Cygwin 通过在 cygdrive/ 前面加上驱动器名称来处理 Windows 驱动器。它还更喜欢 Unix 风格的路径。因此,您应该将 Unix 命令更改为:

String unixCommand = "sh /cygdrive/u/home/ash/test.sh";

这应该会成功执行您的脚本。

但是您接下来会看到输出只是数字而不是任何清晰的文本。那是因为在您的 runShellScript 中,您使用的是最低级别的 read() 方法,并且一次读取一个字节的过程输出,然后打印每个字节,每个字节它自己的单独的行。至少,您应该使用更高级别的流,例如 DataInputStream - 或者基本上任何具有 read* 方法的类都可以获取 Strings 而不是字节。更好的是,使用 Reader 子类,如 BufferedReader,因为这是自 JDK 1.1 以来的现代方法。完成后,您应该会看到输出。

关于java - 运行位于服务器上并映射为 U ://dirver on windows from windows in java application? 的 unix shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9430803/

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