Почему, когда я делаю это: $ var=$(java -version)
на моем терминале bash, var
всегда пуст? То же самое с $ java -version >> version.txt
ничего не отправляется в файл version.txt.
2 ответа
3
Команда обычно отправляет такую информацию в STDERR, а не в STDOUT. Так что в вашем случае вы должны использовать такие команды, как:
java -version >>version.txt 2>&1
а также
var=$((java -version) 2>&1)
3
Как указал Ромео, java -version
пишет в stderr, а не в stdout, поэтому вы должны использовать:
var=$(java -version 2>&1)
Если вы хотите получить только версию, а не весь вывод команды java -version
, что более удобно для сценариев, например, вы можете использовать что-то вроде:
var=$(java -version 2>&1 | awk -F '"' 'NR==1 {print $2}')
объяснение
java -version
печатает сообщение о версии java в stderr2>&1
перенаправляет stderr на стандартный вывод|
принимает вывод команды левой рукой и использует его как ввод для команды правой рукиawk -F '"' 'NR==1 {print $2}'
немного сложнее, но в основном он делит входные данные, которые он получает, на части, что позволяет вам работать с каждой частью по отдельности (вероятно, наиболее осведомленные люди львы, это очень плохое резюме того, что есть и что делает awk).- Символ, который
awk
принимает для деления, указывается опцией-F
, в этом случае он делится на символ"
- Последняя часть указывает, что должен быть напечатан только второй элемент (
{print $2}
) из первой строки (NR==1
) результирующего деления.
- Символ, который
Это выведет что-то вроде 1.8.0_191
.