Как «rpm -i» пакет, только если более старая версия не существует?

Я хочу установить некоторые пакеты RPM из сценария оболочки. Я хочу убедиться, что каждый пакет действительно установлен, но я не хочу обновлять пакет, на котором уже установлена ​​старая версия (чтобы избежать глубокого разрешения зависимостей).

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

вы можете установить в зависимости от наличия пакета в системе:

rpm -q mypackage || rpm -i mypackage.rpm 

Используйте следующую команду: rpm -q mypackage && rpm -i mypackage.rpm . Если запрос на rpm завершается успешно, то установка пакета rpm продолжится. Else Если запрос не выполняется, установка не будет продолжена. Однако если вы используете || вместо && , то, несмотря на предыдущую команду запроса пакета, он попытается установить пакет, который в любом случае не имеет смысла.

Что делать, если вы сначала проверите, установлен ли этот пакет, а если нет, вы его установите. Как вы написали, вы хотите реализовать это в сценарии оболочки, это будет своего рода if -clause.

Псевдокод:

 if is_installed($package) then return is_already_installed else rpm -i $package return $? fi 

Первая часть может быть расширена другим тестом на текущей установленной версии (например, для окончательного отчета сценария).

Вы можете найти rpm -q <package name> полезным или даже rpm -U для обновления.