Я хочу отобразить переменную 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
, не найденную для одного из моих модульных тестов. Я использую этот хак / трюк для изменения моего PATH и проверяя результат processBuilder.environment()
и, конечно же, переменная PATH, передаваемая процессу, не должна позволять находить сортировку (я пробовал пустой строка, а также случайный путь). Я хотел бы посмотреть, делает ли оболочка что-нибудь смешное и исправляет резервную копию PATH, которую я пытаюсь уничтожить.