我尝试使用 java 运行一些 bash 脚本并将终端输出存储在字符串中。但是,有很多命令不能以这种方式工作。它一直显示找不到命令,但我可以在终端、前节点 --version、go --version 中正确运行这些命令。我想是路径问题,但不知道如何解决它。
另一个问题,当我运行"python --version"时,它显示"Python 2.7.10",但它在getErrorStream中。谁能给我一些提示?
public static void runscript() throws IOException {
Runtime rt = Runtime.getRuntime();
String[] commands = { "/bin/bash", "-c", "node --version" };
Process proc = null;
try {
proc = rt.exec(commands);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
// read the output from the command
System.out.println("Here is the standard output of the command:n");
String s = null;
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
// read any errors from the attempted command
System.out.println("Here is the standard error of the command (if any):n");
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}
}
回复@VishalKamat评论。
当我尝试使用"哪个节点"的输出作为我的路径时,即"/usr/local/bin/node"。它有效!!
但是,这是否意味着当我需要获取不同的应用程序版本信息时,我必须更改路径?我以为我可以很容易地像在终端中一样获取信息。
我尝试以这种方式通过java打印$PATH
String[] commands = { "/bin/bash","-c", "$PATH" };
错误消息是:
/bin/bash: /usr/bin:/bin:/usr/sbin:/sbin: No such file or directory