Только root может регистрация в Мариадб на Centos 7

Итак, похоже, что источником проблемы было то, что у меня были подключенные библиотеки Qt, такие как libQt5Core.so.5 в /usr/local/lib. Когда я удалил их, все снова заработало.
Я читал, что менеджер пакетов не помещает туда никаких библиотек, так что, вероятно, это я совершил глупую ошибку.

2
31.03.2019, 14:44
3 ответа

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

while IFS= read -r SINGLELINE
do
  SOMEVAR="updated value"
  printf '%s\n' "this is a single line: ${SINGLELINE}"
  printf '%s\n' "SOMEVAR is now: ${SOMEVAR}"
done << EOF
$MULTILINE
EOF
printf '%s\n' "Final SOMEVAL is still $SOMEVAR"

В зависимости от реализации sh, здесь -документы реализованы либо как удаленный временный файл, в котором оболочка заранее сохранила расширение переменной, за которым следует перевод строки, либо как канал, в который оболочка передает расширение переменная, за которой следует новая строка. Но в любом случае, за исключением оригинальной оболочки Bourne (, которая больше не используется в наши дни и не является POSIX-совместимой оболочкой ), перенаправляемая команда не выполняется в подоболочке (, как POSIX. требует ).

или вы можете использовать split+glob:

IFS='
' # split on newline only
set -o noglob
for SINGLELINE in $MULTILINE
do
  SOMEVAR="updated value"
  printf '%s\n' "this is a single line: ${SINGLELINE}"
  printf '%s\n' "SOMEVAR is now: ${SOMEVAR}"
done
printf '%s\n' "Final SOMEVAL is still $SOMEVAR"

Но будьте осторожны, он пропускает пустые строки.

5
27.01.2020, 21:51

У меня работает:

$ cat bin/test
#! /bin/sh
SOMEFILE=$1
MULTILINE="`cat ${SOMEFILE}`"
SOMEVAR="blah"

echo "${MULTILINE}" | while IFS= read -r SINGLELINE
do
 echo "this is a single line: ${SINGLELINE}"
 echo "but accessing this var fails: ${SOMEVAR}"
done

и

$ bin/test bin/test
this is a single line: #! /bin/sh
but accessing this var fails: blah
this is a single line: SOMEFILE=$1
but accessing this var fails: blah
this is a single line: MULTILINE="`cat ${SOMEFILE}`"
but accessing this var fails: blah
this is a single line: SOMEVAR="blah"
but accessing this var fails: blah
this is a single line:
but accessing this var fails: blah
this is a single line: echo "${MULTILINE}" | while IFS= read -r SINGLELINE
but accessing this var fails: blah
this is a single line: do
but accessing this var fails: blah
this is a single line:  echo "this is a single line: ${SINGLELINE}"
but accessing this var fails: blah
this is a single line:  echo "but accessing this var fails: ${SOMEVAR}"
but accessing this var fails: blah
this is a single line: done
but accessing this var fails: blah
0
27.01.2020, 21:51

Вы бы читали прямо из файла без конвейера. Это позволяет избежать запуска цикла whileв подоболочке, что позволяет вам видеть измененное значение $SOMEVALUEпосле цикла.

SOMEVAR="original value"

while IFS= read -r SINGLELINE
do
    SOMEVAR="updated value"
    printf 'this is a single line: %s\n' "$SINGLELINE"
    printf 'SOMEVAR is now: %s\n' "$SOMEVAR"
done <"$SOMEFILE"

printf 'Final SOMEVAR is: %s\n' "$SOMEVAR"

Если вы настаиваете на своей $MULTILINEпеременной, запишите ее в файл и прочитайте оттуда:

tmpfile=$(mktemp)
printf '%s\n' "$MULTILINE" >"$tmpfile"

while...; do
  ...
done <"$tmpfile"
rm "$tmpfile"

Также связанные:

Ответ на связанный выше вопрос также предполагает написание вашей программы таким образом, чтобы все использования $SOMEVARпроисходили внутри подоболочки в конце конвейера:

MULTILINE=$(cat "$SOMEFILE")
SOMEVAR="original value"

printf '%s\n' "$MULTILINE" | {
    while IFS= read -r SINGLELINE
    do
        SOMEVAR="updated value"
        printf 'this is a single line: %s\n' "$SINGLELINE"
        printf 'SOMEVAR is now: %s\n' "$SOMEVAR"
    done

    printf 'Final SOMEVAR is: %s\n' "$SOMEVAR"
}

Также, возможно, связано:

Другие вопросы, которые могут представлять интерес:

3
27.01.2020, 21:51

Теги

Похожие вопросы