Выполнение «echo» с использованием Java ProcessBuilder не интерполирует переменные (выводит строку «$ PATH»)

Я хочу вывести переменную 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, которую я пытаюсь уничтожить.

5
задан Community 23 May 2017 в 12:06
поделиться