Zug*_*alt 5 java path environment-variables echo processbuilder
我想回显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);
Run Code Online (Sandbox Code Playgroud)
一些额外的上下文:
我试图模拟sort我的单元测试之一找不到的命令。我正在使用此技巧/技巧来更改我的PATH,并检查结果processBuilder.environment()并确定传递给进程的PATH变量是否足够不允许查找排序(我尝试了空字符串和随机路径)。我想看看shell是否正在做任何有趣的事情并修复我试图破坏的PATH。
$PATH是bash(和其他外壳程序)用于引用环境变量的语法PATH。由于它是echo使用ProcessBuilder执行bash的,因此它不打印环境变量的内容也就不足为奇了。
您应该掌握Java环境变量的内容,并将其作为外部进程的参数,或者执行一个能够$PATH正确解释语法的程序(例如bash)。
正如您在下面的评论中指出的那样,
[...] ImmutableList.of("/bin/bash","-c","echo $PATH") [...]
Run Code Online (Sandbox Code Playgroud)
确实会打印PATH环境变量的内容。