gpt4 book ai didi

java - 无法从 java : java. io.IOException : . 运行 ksh 脚本:未找到

转载 作者:太空宇宙 更新时间:2023-11-04 09:00:57 27 4
gpt4 key购买 nike

我尝试从 java 代码运行 shell 脚本,但遇到问题。该脚本位于batchstart.sh 文件中 -

#!/bin/ksh
export DISPLAY=:0.0

现在脚本在命令行上使用点运行 - 。批处理启动.sh

如何从 java 运行它?我的java代码如下。它抛出以下异常 -

java.io.IOException: .: not found    at java.lang.UNIXProcess.forkAndExec(Native Method)    at java.lang.UNIXProcess.<init>(UNIXProcess.java:102)    at java.lang.ProcessImpl.start(ProcessImpl.java:65)    at java.lang.ProcessBuilder.start(ProcessBuilder.java:451)    at java.lang.Runtime.exec(Runtime.java:591)    at java.lang.Runtime.exec(Runtime.java:429)    at SetDisplay.main(SetDisplay.java:12)
import java.io.*;

public class SetDisplay {

public static void main(String[] args) {

File wd = new File("/myhomedir/");
System.out.println("Working Directory: " +wd);
Process proc = null;

try {
proc = Runtime.getRuntime().exec(". batchstart.sh", null, wd);
} catch (Exception e) {
e.printStackTrace();
}
}
}

如何让 shell 脚本运行?

我也尝试了以下代码,但这也不起作用。

File wd = new File("/bin"); 
System.out.println(wd);
Process proc = null;
try {
proc = Runtime.getRuntime().exec("/bin/bash", null, wd);
}
catch (IOException e) {
e.printStackTrace();
}
if (proc != null) {
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
out.println("cd /home/");
out.println(". batchstart.sh");
out.println("exit");
try {
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
proc.waitFor();
in.close();
out.close();
proc.destroy();
}
catch (Exception e) {
e.printStackTrace();
}
}

最佳答案

从命令行运行时,在脚本开头使用点表示脚本应在当前环境中运行,而不是生成新的子 shell 并使用当前环境的新副本。这允许您导出环境变量的新值,以便稍后从同一交互式 shell 运行的命令使用。

显然,此技术仅在您从实际 shell 运行 batchstart.sh 脚本时才有效。 Java 不知道这种机制是如何工作的,所以这个点对它来说没有任何意义。脚本无法修改调用它的 Java 进程的环境。

如果您的目标是更改 Java 进程运行的其他命令的 DISPLAY 环境变量的值,请考虑使用 ProcessBuilder类为子进程指定新环境。 Java 不包含在其自身环境中修改变量的内置方法。

关于java - 无法从 java : java. io.IOException : . 运行 ksh 脚本:未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/529474/

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