gpt4 book ai didi

java - 使用 Java ProcessBuilder 执行 "echo"不会插入变量(输出字符串 "$PATH")

转载 作者:搜寻专家 更新时间:2023-11-01 02:52:01 24 4
gpt4 key购买 nike

我想回显 PATH 变量,目标是从 Java ProcessBuilder 获得与在终端中运行 echo $PATH 相同的输出。但是,当它执行时,输出实际上是 $PATH 而不是 PATH 变量的值。我想知道 ProcessBuilder 是否正在转义 $ 并且是否有防止这种情况发生的技巧?

这是我所说的输出字符串“$PATH”的代码示例:

List<String>  processBuilderCommand = ImmutableList.of("echo","$PATH");

ProcessBuilder processBuilder = new ProcessBuilder(processBuilderCommand).redirectErrorStream(true);

final Process process = processBuilder.start();

String commandOutput = CharStreams.toString(CharStreams.newReaderSupplier(new InputSupplier<InputStream>() {
@Override
public InputStream getInput() throws IOException {
return process.getInputStream();
}
}, Charset.defaultCharset()));

System.out.println(commandOutput);

一些额外的上下文:

我正在尝试模拟未在我的单元测试中找到的 sort 命令。我正在使用 this hack/trick 改变我的 PATH 并通过检查 processBuilder.environment() 的结果,确保传递给进程的 PATH 变量不允许查找排序(我试过空字符串以及随机路径)。我想看看 shell 是否在做任何有趣的事情并修复我试图破坏的 PATH。

最佳答案

$PATHbash(和其他 shell)中用来引用环境变量 PATH 的语法。因为它是使用 ProcessBuilder 而不是 bash 执行的 echo,所以它不打印环境变量的内容也就不足为奇了。

您应该从 Java 获取环境变量的内容,并将其作为参数传递给外部进程,或者执行能够正确解释 $PATH 语法的程序, (例如 bash)。


正如您在下面的评论中所指出的,

[...]  ImmutableList.of("/bin/bash","-c","echo $PATH")  [...]

确实打印了PATH环境变量的内容。

关于java - 使用 Java ProcessBuilder 执行 "echo"不会插入变量(输出字符串 "$PATH"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9368311/

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