Ваш исходный скрипт можно сделать немного более переносимым с помощью set
встроенного -, а также объединить ip и ключ в одну строку, разделенную двоеточием. Позже мы можем использовать удаление префикса и суффикса для извлечения соответствующей записи
#!/usr/bin/env bash
# Set positional parameters
# Example ip addresses
set -- 192.168.0.1:mykey1 192.168.1.1:mykey2
# iterating without specifying 'in' assumes positiona parameters
for host; do
ssh -i ${host##*:}.pem myuser@${host%%:*} << 'ENDSSH'
[A LOT OF STUFF]
ENDSSH
done
У меня сложилось впечатление, что вы жалуетесь на поведение yum по умолчанию.
yum служит менеджером пакетов, который устанавливает/удаляет или обновляет пакеты.
Если есть Error: Nothing to do
, это де-факто -не удается установить/удалить или обновить пакет -, поэтому код возврата == 1.
Если вы хотите проверить, установлен ли пакет, а если нет, то установите его, попробуйте следующее:
rpm -qa | grep wget || yum -y install wget
Это должно дать вам $? == 0 в стандартном сценарии.
Вы пытаетесь установить пакеты, которые либо старше, либо той же версии, что и те, которые вы уже установили в своей системе. yum
проверяет это перед запуском, поэтому он выдает сообщения, когда вы пытаетесь использовать его с этими пакетами. Иначе что бы yum
делал во время обновлений? Если обновление выйдет и будет доступно в одном из репозиториев, обновит ли оно их оба до последней версии и будет ли в системе два одинаковых пакета?
Если вам нужна более старая версия программного обеспечения, вам нужно скомпилировать ее из исходного кода, а не использовать yum
для установки ее rpm
.