Как настроить DNS-сервер для устройства с помощью nmcli?

Другой способ, используя только IFS:

#!/bin/bash
declare -A myArr
IFS='&=' read -a post
for ((i = 0; i < ${#post[@]}; i += 2))
do
    myArr[${post[i]}]=${post[i + 1]}
done
for key in "${!myArr[@]}"
do
    printf "%s: %s\n" "$key" "${myArr[$key]}"
done

read, разбивает входящую строку на слова по всем символам в IFS, поэтому вы можете использовать как &, так и [ f10] в IFS, чтобы разделить на оба. Учитывая, что вход POST всегда имеет значение для ключа, это будет работать.

Однако этот метод не может проверить, существует ли строгое чередование между & и =. Итак, например, age&myAge=name=myName будет проанализирован так, что age=myAge и name=myName.

Заметка о IFS

У вас есть скопировал IFS и восстановил его. Но вам нужно только IFS для read, поэтому примените IFS только для READ:

IFS='...' read ... # or
while IFS='...' read ...; ...

Восстановление IFS затруднительно, так как unset IFS и пустой [ f25] влияют на оболочку по-разному, но одинаковы, когда вы принимаете значение самого IFS. То есть:

IFS=
IFS_BAK="$IFS"

даст такое же значение для IFS_BAK как:

unset IFS
IFS_BAK="$IFS"

Пустое IFS - это то, что: пустая строка. Тем не менее, все IFS заставляют оболочку вести себя так, как если бы использовалось значение по умолчанию IFS (пробел, табуляция, новая строка):

$ foo='a  b  c'
$ printf "|%s|\n" $foo
|a|
|b|
|c|
$ IFS=; printf "|%s|\n" $foo
|a  b  c|
$ unset IFS; printf "|%s|\n" $foo
|a|
|b|
|c|

Итак, если бы вы обнаружил себя с неуспешным IFS, а затем попробовал старый трюк с резервным копированием и восстановлением IFS, вы можете получить неожиданные результаты. Лучше ограничивать изменения в IFS только теми командами, которые в этом нуждаются.

0
задан 26 November 2017 в 17:11

2 ответа

Чтобы добавить пользовательские DNS-серверы, используйте

nmcli connection modify Wired_connection_1 ipv4.dns "192.168.1.1,8.8.8.8,8.8.4.4"

, чтобы проверить, поддерживает ли конфигурация

nmcli connection show Wired_connection_1 | grep "dns" ipv4.dns: 192.168.1.1,8.8.8.8,8.8.4.4 ipv4.dns-search: -- ipv4.dns-options: (default) ipv4.dns-priority: 0 ipv4.ignore-auto-dns: no ipv6.dns: -- ipv6.dns-search: -- ipv6.dns-options: (default) ipv6.dns-priority: 0 ipv6.ignore-auto-dns: no

. Я наткнулся на ту же проблему, если я удалю 192.168.1.1, затем из-за некоторого внутреннего сетевого моста vmware он не работал, но для установки дополнительного DNS-сервера вы можете использовать вышеуказанный метод.

1
ответ дан 18 July 2018 в 02:33

Чтобы добавить пользовательские DNS-серверы, используйте

nmcli connection modify Wired_connection_1 ipv4.dns "192.168.1.1,8.8.8.8,8.8.4.4"

, чтобы проверить, поддерживает ли конфигурация

nmcli connection show Wired_connection_1 | grep "dns" ipv4.dns: 192.168.1.1,8.8.8.8,8.8.4.4 ipv4.dns-search: -- ipv4.dns-options: (default) ipv4.dns-priority: 0 ipv4.ignore-auto-dns: no ipv6.dns: -- ipv6.dns-search: -- ipv6.dns-options: (default) ipv6.dns-priority: 0 ipv6.ignore-auto-dns: no

. Я наткнулся на ту же проблему, если я удалю 192.168.1.1, затем из-за некоторого внутреннего сетевого моста vmware он не работал, но для установки дополнительного DNS-сервера вы можете использовать вышеуказанный метод.

1
ответ дан 24 July 2018 в 17:35
  • 1
    Я не могу вспомнить, что я делаю, и не смогу проверить ответ на некоторое время. Но звучит правильно. – Thufir 17 March 2018 в 03:30

Другие вопросы по тегам:

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