Вывод команды сохранения скрипта Bash в переменную - PullRequest
57 голосов
/ 19 марта 2012

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

либо

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

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

Я сделал:

version=$(java --version)

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

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

Ответы [ 2 ]

67 голосов
/ 19 марта 2012
 version=$(java -version 2>&1)

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

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

15 голосов
/ 19 марта 2012

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

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

Для перенаправления stderr на stdout.

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

java -version > /dev/null

java -version 2> /dev/null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...