gpt4 book ai didi

java - 当我从 java processbuilder 运行 bash 时,$PATH 是不同的

转载 作者:行者123 更新时间:2023-12-02 03:16:57 26 4
gpt4 key购买 nike

当我运行包含“echo $Path”命令的 bach 脚本时,它在由 java 运行时输出的内容与从命令行运行时输出的内容不同。它还会影响我脚本的其他命令。为什么会发生这种情况以及如何避免?

以下是我运行 bashscript 的函数

public static String executeCommands(File tempScript, Boolean deleteFile)
throws IOException, InterruptedException {

StringBuffer output = new StringBuffer();

try {
ProcessBuilder pb = new ProcessBuilder("bash", tempScript.toString());
pb.inheritIO();
Process process = pb.start();
process.waitFor();


BufferedReader reader =
new BufferedReader(new InputStreamReader(process.getInputStream()));

String line = "";
while ((line = reader.readLine()) != null) {
output.append(line + "\n");
}
return line;

} finally {
if (deleteFile == true)
tempScript.delete();
}
}

当脚本在 bashscript 中包含“echo $PATH”时

输出为

/usr/bin:/bin:/usr/sbin:/sbin

但是当我从命令行运行时输出是

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/scala/scala-2.11.8/bin:/Users/<user>/Installations/activator-dist-1.3.10

最佳答案

当我们从终端运行命令时,它会从 .bashrc 文件中读取环境变量,但 Eclipse 似乎不会从 .bashrc 中读取环境变量。

使用./eclipse -DPATH=$PATH启动eclipse以从bashrc读取

PATH 变量来自

1.终端

user@ubuntu:~$ javac SS47.java 
user@ubuntu:~$ java SS47
/home/user/perl5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/user/apache-maven-3.3.3/bin:/home/user/apache-maven-3.3.3/bin:/opt/jdk/jdk1.8.0_60/bin:/opt/jdk/jdk1.8.0_60/jre/bin:/home/user/dsc-cassandra-2.1.6/bin:/home/user/hadoop-2.6.0/bin:/home/user/hadoop-2.6.0/sbin:/home/user/android/android-studio/bin:/home/user/android/android-sdk-linux/platform-tools:/home/user/elasticsearch-2.3.5/bin:/home/user/scala-2.11.8/bin::/home/user/apache-maven-3.3.3/bin

2.eclipse 没有 $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

3.eclipse 与 PATH ./eclipse -DPATH=$PATH

/home/user/perl5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/user/apache-maven-3.3.3/bin:/home/user/apache-maven-3.3.3/bin:/opt/jdk/jdk1.8.0_60/bin:/opt/jdk/jdk1.8.0_60/jre/bin:/home/user/dsc-cassandra-2.1.6/bin:/home/user/hadoop-2.6.0/bin:/home/user/hadoop-2.6.0/sbin:/home/user/android/android-studio/bin:/home/user/android/android-sdk-linux/platform-tools:/home/user/elasticsearch-2.3.5/bin:/home/user/scala-2.11.8/bin::/home/user/apache-maven-3.3.3/bin

关于java - 当我从 java processbuilder 运行 bash 时,$PATH 是不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40168112/

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