Я хочу вывести переменную PATH, чтобы получить тот же вывод от Java ProcessBuilder, что и при выполнении echo $ PATH
в терминал. Однако, когда он выполняет, на самом деле вывод $ PATH
вместо значения переменной PATH. Интересно, ускользает ли ProcessBuilder от $ и есть ли уловка, чтобы предотвратить это?
Вот пример кода того, о чем я говорю, который выводит строку «$ PATH»:
List 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() {
@Override
public InputStream getInput() throws IOException {
return process.getInputStream();
}
}, Charset.defaultCharset()));
System.out.println(commandOutput);
Некоторый дополнительный контекст:
Я пытаюсь имитировать команду sort
, которая не найдена для одного из моих модульных тестов. Я использую этот хак / трюк, чтобы изменить свой PATH и проверяя результат processBuilder.environment ()
, и, конечно же, переменная PATH, передаваемая процессу, не должна позволять найти sort (я пробовал пустую строку, а также случайный путь). Я хотел бы увидеть, делает ли оболочка что-нибудь забавное и исправляет ли резервную копию PATH, которую я пытаюсь уничтожить.