Bash script сохранить вывод команды в переменную
У меня проблема с хранением вывода команды внутри переменной в bash script.
Я знаю, что есть два способа сделать это
либо
foo=$(bar)
# or
foo=`bar`
но для запроса версии Java это, похоже, не работает.
Я сделал:
version=$(java --version)
Это не сохраняет значение внутри var. Он даже печатает его, что действительно не должно быть.
Я также попытался перенаправить вывод в файл, но это также не удается.
Ответы
Ответ 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