Подтвердить что ты не робот

Bash script сохранить вывод команды в переменную

У меня проблема с хранением вывода команды внутри переменной в bash script.
Я знаю, что есть два способа сделать это

либо

foo=$(bar)
# or
foo=`bar`

но для запроса версии Java это, похоже, не работает.

Я сделал:

version=$(java --version)

Это не сохраняет значение внутри var. Он даже печатает его, что действительно не должно быть.

Я также попытался перенаправить вывод в файл, но это также не удается.

4b9b3361

Ответ 1

 version=$(java -version 2>&1)

Параметр version принимает только одну тире, и если вы перенаправляете stderr, то есть, где написано сообщение, вы получите желаемый результат.

В качестве побочного элемента использование двух дефис является неофициальным стандартом для Unix-подобных систем, но поскольку Java пытается быть почти идентичным на разных платформах, это нарушает ожидания Unix/Linux и ведет себя одинаково в этом отношении, как в Windows, и, как я подозреваю, в Mac OS.

Ответ 2

Это потому, что java -version записывается в stderr, а не stdout. Вы должны использовать:

version=$(java -version 2>&1)

Чтобы перенаправить stderr в stdout.

Вы можете увидеть его, выполнив следующие 2 команды:

java -version > /dev/null

java -version 2> /dev/null