обратная кавычка или здесь строка или чтение не работают должным образом в RHEL 8

У меня похожая проблема после обновления archlinuxarm :некоторые сайты работают, но большинство из них недоступны, а pacman не может обновляться. В моем случае проблема заключается в dnssec на преобразователе системы. Это можно обнаружить, запустив из консоли:

Запрос разрешения на archlinuxarm.org (или любой другой недоступный сайт)

ответ был :... Ошибка проверки DNSSEC :недействительна

В моем случае помогло добавление DNSSEC=false в /etc/systemd/resolved.conf и перезагрузиться

3
02.04.2021, 09:45
1 ответ

read a bчитает два слова из одной строки (слов, разделенных $IFSсимволами, а разделители слов и строк экранируются с помощью\).

Ваш скрипт pythonвыводит 2 строки.

В более старых версиях bashбыла ошибка, заключавшаяся в том, что cmd <<< $varили cmd <<< $(cmd2)применяли разбиение слов к расширению $varи $(cmd2), и объединение результирующих элементов обратно с пробелами действительно составляло содержимое здесь -строка (см., например, Почему cut не работает с bash, а не с zsh?).

Это было исправлено в версии 4.4, что объясняет, почему вы больше не получаете того, что ожидаете .

Чтобы прочитать первые две строки вывода команды в переменные $aи $bв bash, используйте:

{
  IFS= read -r a
  IFS= read -r b
} < <(cmd)

Или (не в интерактивных оболочках):

shopt -s lastpipe
cmd | {
  IFS= read -r a
  IFS= read -r b
}

Или безlastpipe:

cmd | {
  IFS= read -r a
  IFS= read -r b
  something with "$a" and "$b"
}
# $a and $b will be lost after the `{...}` command group returns

Чтобы соединить строки вывода команды пробелами, используйте:cmd | paste -sd ' ' -. Затем вы можете сделать:

IFS=' ' read -r a b < <(cmd | paste -sd ' ' -)

Если хотите.

Вы также можете прочитать строки в элементы массива с помощью:

readarray -t array < <(cmd)

И соединить элементы массива с первым символом$IFS(пробел по умолчанию )с "${array[*]}".

10
28.04.2021, 22:54

Теги

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