Предполагая, что уровень патча всегда будет строкой из четырех цифр:
$ ver=1.2.0001
$ printf '%s\n' "$ver" | awk -F '.' '{ printf("%s.%s.%04d\n", $1, $2, $3 + 1) }'
1.2.0002
Здесь используется awk
и интерпретируется версия как три поля, разделенные точками. Он печатает первые два поля как есть, но добавляет 1 к третьему полю и форматирует результат, используя%04d
(заполненное нулем -четырехзначное десятичное число ).
Это сгенерирует 1.2.10000
, если $ver
равно 1.2.9999
.
Чтобы сохранить значение обратно в ver
, используйте ver=$( printf... | awk... )
.
Политика Debian предоставляет пример, где foo
разбит на foo
и foo-data
. Это ситуация, которая применима здесь.
На самом деле мы не должны заменять foo
пакетом Provides:
, как ожидалось. Это связано с тем, что при добавлении Provides: foo
к foo1
и foo2
любой из пакетов будет удовлетворять bar
, в то время как в действительности bar, вероятно, зависит от содержимого foo1
или foo2
, но не любого из них произвольно.. Следовательно, выполнение foo
означает, что вам нужно foo1
И foo2
. Вы можете сделать это, только еслиfoo
Depends: foo1, foo2
.
Таким образом, исходный управляющий файл должен выглядеть так:
Source: libfoo
Maintainer: Stewart <stewart@unix.stackexchange.com>
Build-Depends: debhelper-compat (= 11)
Package: foo
Architecture: all
Package: bar
Architecture: all
Depends: foo
Отсюда, dpkg -i foo_1.0.0_all.deb bar_1.0.0_all.deb
для установки начальных условий. Затем измените свой управляющий файл на этот:
Source: libfoo
Maintainer: Stewart <stewart@unix.stackexchange.com>
Build-Depends: debhelper-compat (= 11)
Package: foo
Architecture: all
Depends: foo1, foo2
Package: foo1
Architecture: all
Breaks: foo (<< 1.1)
Replaces: foo (<< 1.1)
Package: foo2
Architecture: all
Breaks: foo (<< 1.1)
Replaces: foo (<< 1.1)
Package: baz
Architecture: all
Depends: foo1, foo2
Затем соберите это, и вы обнаружите, что при установке/обновлении foo
, foo1
, foo2
и baz
все они будут установлены правильно и не сломаются bar
.