LINUX.ORG.RU

Сравнения версиий в Bash

 


0

1

Идея такова:

Есть скрипт который устанавливается в нужную дерикторию

В нем прописано

SCRIPT_NAME_VERSION=0.0.1

В скрипте который устанавливает софт нужно сделать проверку по версиям

Если версия локального скрипта ниже чем апстримовского то предлагать апдейт

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

Deleted

Если скрипт свой, замени эту версию либо на единственное число, или три переменных (SCRIPT_NAME_VERSION_MAJOR, SCRIPT_NAME_VERSION_MINOR, SCRIPT_NAME_VERSION_PATCH) и сравнивай их как обычные числа.

Иначе обычно в пакетном менеджере системы есть режим который сравнивает версии:

% pkg version -t 0.0.1 0.1.0  # FreeBSD
<
% dpkg --compare-versions 0.0.1 \< 0.1.0 && echo yes || echo no  # Debian
yes

Ещё есть https://github.com/repology/libversion, у неё в комплекте идёт утилита сравнивающая версии наиболее предсказуемым и адекватным образом.

В крайнем случае можно написать и непосредственно на баше. В README libversion пишут сколько есть всяких хитрых случаев, это всё точто не реализовать, но если ограничиться числовыми X.Y.Z, то достаточно разбить 2 строки в массивы и сравнить покомпонентно.

anonymous
()

дерикторию

Слышал если первая и последняя буква на месте, то отсаьлные можно переставлять как угодно.

anonymous
()

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

Например,

./script.sh run

./script.sh version

case $1 in
  run)
    do something
  ;;
  version)
    echo $SCRIPT_NAME_VERSION
  ;;
esac
Установщик перед тем, как запустить скрипт должен вызывать его с аргументом version и сверять актуальность.

shell-script ★★★★★
()

coreutils достаточно

cat старый новый новый | grep ^SCRIPT_NAME_VERSION= | sort -rV | uniq -c | head -n 1 | grep -q ^1 || обновлять

может быть с точностью до наоборот.

DonkeyHot ★★★★★
()
Ответ на: комментарий от shell-script

Я это знаю

Я имел ввиду как сравнивать числа правильно, а так, я буду грепать версию установленную и сравнивать версию в репе

eval $(grep SCRIPT_NAME_VERSION= /etc/путь)
Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

Напуркуа оно тебе для апдейта самодельного скрипто-софта?! 21-й век вокруг:

git pull origin master

Всё.

anonymous
()
Ответ на: комментарий от anonymous

Если бы все так просто было - я бы не спрашивал

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.