Где Java ProcessBuilder ищет выполнение команд? - PullRequest
4 голосов
/ 21 февраля 2012

Когда я выполняю команду, используя ProcessBuilder, как он узнает, где искать эту команду?Используя этот хак / трюк Я изменил свою переменную PATH (проверено проверкой processBuilder.environment()), чтобы она была плохой (пустой, рабочий каталог и т. Д.), Но ProcessBuilder все еще может выполнять сортировку, эхо, bash и т. Д.просто хорошо.Как это происходит?!

Примечание. Моя конкретная среда разработки - OSX, но этот код также будет работать в Red Hat Enterprise Linux.

Ответы [ 2 ]

5 голосов
/ 21 февраля 2012

Документация гласит:

[...] команда, список строк, который обозначает вызываемый файл внешней программы, и его аргументы, если таковые имеются.Какие списки строк представляют допустимую команду операционной системы, зависит от системы.[...]

Что по сути означает, что поиск программ для выполнения зависит от конкретной системы и JVM, на которой вы работаете.

Я не могу найтиполная матрица поведения JVM / System, но, предположительно, она ведет себя подобно популярным оболочкам системы (bash для * nix и cmd для окон), то есть ищет каталоги в переменной среды PATH слева направоправильно и выполняет первый исполняемый файл, который он находит.

1 голос
/ 21 февраля 2012

Если вы хотите взять под контроль команды поиска, то, ну, в общем, возьмите под контроль команды поиска. Не позволяйте ProcessBuilder искать. Используйте свой собственный код, чтобы найти то, что вы хотите запустить, а затем установите абсолютный путь к параметру в ProcessBuilder.

...