У вас две проблемы. Первая - вы пытаетесь установить mariadb RPM, который конфликтует с тем, что есть в базовых пакетах CentOS/RHEL. Вторая - вы используете команду rpm
.
Что касается первой проблемы, то поскольку вы не работаете в интернете с этой машиной, то это не проблема. Но если вам удастся подключить машину к интернету, то у вас могут возникнуть проблемы с обновлениями yum. Так что будьте осторожны.
Что касается второй проблемы, не используйте команду rpm, даже если это всего лишь один RPM. Вы всегда должны использовать yum
. Вы можете устанавливать rpm непосредственно из yum. Примеры ниже.
# yum install --disablerepo=* openfire-4.0.2-1.i386.rpm -y
## Or in your case...
# yum install --disablerepo=* MariaDB*.rpm -y
Вы можете просто сделать:
case $1 in (/*) pathchk -- "$1";; (*) ! : ;; esac
Этого должно быть достаточно. И он запишет диагностику в stderr и вернет ошибку для недоступных или несоздаваемых компонентов. pathchk
не о существующих путевых именах - это о используемых путевых именах.
Утилита
pathchk
должна проверять, что один или несколько путей действительны (то есть, они могут использоваться для доступа или создания файла, не вызывая синтаксических ошибок) и переносимая ] (то есть без результата усечения имени файла) . Опция-p
предоставляет более обширные проверки переносимости.По умолчанию утилита
pathchk
проверяет каждый компонент каждого операндаpathname
на основе базовой файловой системы. Диагностика должна быть написана для каждого операндаpathname
, который:
длиннее, чем
{PATH_MAX}
байтов (см. Значения переменных Pathname в) Содержит любой компонент, длина которого превышает
{NAME_MAX}
байтов в его содержащем каталогеСодержит любой компонент в каталоге, который недоступен для поиска
Содержит любой символ в любом компоненте, который недействителен в содержащем его каталоге
Формат диагностического сообщения не указан, но должен указывать обнаруженную ошибку и соответствующий операнд
пути
.Не считается ошибкой, если один или несколько компонентов операнда
путевого имени
не существуют, пока может быть создан файл, соответствующийпутевому имени
, указанному отсутствующими компонентами. это не нарушает ни одну из проверок, указанных выше.
Если под абсолютный путь вы имеете в виду, что он начинается с /
, и мы говорим о bash
(как предлагает тег):
$ var1='/tmp/foo'
$ var2='tmp/foo'
$ [[ "$var1" =~ ^/ ]] && echo yes || echo no
yes
$ [[ "$var2" =~ ^/ ]] && echo yes || echo no
no
Просто проверьте первый символ строки, используя синтаксис подстроки:
[[ ${var:0:1} = / ]] || return 1
POSIX определяет абсолютный путь как имя пути, начинающееся с одного или более двух /
.
Существует утилита pathchk для проверки пути, так что вы можете сделать:
[ -z "${1%%/*}" ] && pathchk -pP "$1"
-p
указывает pathchk
выполнить проверку пути, который:
_POSIX_PATH_MAX
)_POSIX_NAME_MAX
)-.... P
защищает вас от любого компонента пути, начинающегося с -
и пустого пути.
Согласование шаблонов выполняется с помощью операторов case
во всех Bourne-подобных оболочках.
is_absolute() { case "$1" in ///* | //) true;; //*) false;; # on some systems, //foo is special and is # not an absolute path. // alone is / /*) true;; *) false esac }
Удалите первые две записи в системах, которые не обрабатывают //foo
специальным образом.
[ "$1" != "${1#/}" ] || return 1
Возможно, есть лучший способ (поэтому я и спросил). Этот код отсекает все ведущие /
в $1
и проверяет, что результат не такой же, как $1
.
Абсолютный путь
/
/../
или /./
.. /
или ./
/ ..
или /.
, чтобы вы могли сделать это (переносимо) с помощью оператора case:
case "x$1" in (x*/..|x*/../*|x../*|x*/.|x*/./*|x./*) rc=1 ;; (x/*) rc=0 ;; (*) rc=1 ;; esac return $rc
Это намеренно исключает такие вещи, как
/../../../foo/../../../bar
, которые допускает наивная интерпретация "ведущей косой черты".
Краткое определение абсолютного пути см. В realpath в POSIX.