У меня похожая проблема после обновления archlinuxarm :некоторые сайты работают, но большинство из них недоступны, а pacman не может обновляться. В моем случае проблема заключается в dnssec на преобразователе системы. Это можно обнаружить, запустив из консоли:
Запрос разрешения на archlinuxarm.org (или любой другой недоступный сайт)
ответ был :... Ошибка проверки DNSSEC :недействительна
В моем случае помогло добавление DNSSEC=false в /etc/systemd/resolved.conf и перезагрузиться
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[*]}"
.