Как получить номер версии, а затем сравнить его с минимальным

#bash #shell

Вопрос:

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

Мой текущий сценарий выглядит так

 #!/usr/bin/env bash

x=`pgsync -v`

echo "---"
echo $x
 

и его выход-это

 > ./version-test.sh
0.6.7
---

 

Я также пробовал, x="$(pgsync -v)" и я все еще получаю пустую строку. Что я здесь делаю не так?

Комментарии:

1. Для этого и существуют менеджеры пакетов. Не тестируйте его во время выполнения; пусть он выйдет из строя, если вы не установили его должным образом.

2. Похоже pgsync -v на запись в стандартную ошибку, а не в стандартный вывод. Вероятно, потребуется некоторое перенаправление.

3. Не уверен, что > /dev/null это необходимо.

4. Посмотрев на выходные данные вашего скрипта, которые вы предоставили. Вывод pgsync, появившийся над черточками, был большим намеком.

5. @EmAe — не зная, что искать (согласно комментарию Шона) … pgsync -v 2>stderr.txt >stdout.txt а затем посмотрите, какой файл содержит какие выходные данные

Ответ №1:

Если вы пытаетесь записать вывод команды в переменную, а вместо этого он выводится на терминал, это признак того, что команда записывает не в свой стандартный вывод, а в другой поток — обычно стандартная ошибка. Так что просто перенаправьте его:

 x=$(pgsync -v 2>amp;1)
 

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

Кроме того, предпочитайте $() замену команд обратным указателям; подробности см. в разделе Часто задаваемые вопросы Bash 082.