В файле resolv.conf перечислены все доступные DNS-серверы. Пока первый в списке запущен и работает, все запросы будут отправляться на него. Ничего для остальных, если только первый не упал. Итак, если первый DNS-сервер в списке включен и знает ответ, он ответит «Я знаю!», иначе он скажет «Боюсь, я не знаю…». И это все. Вы должны сделать 192.168.1.5 (DNS-сервер сайта 2 )осведомленным обо всех записях сайта 1 и, конечно, -наоборот. Привет
Предположим, у вас есть следующие файлы :foo.abc
, bar.abc
, qux.ghi
. В bash тело цикла выполняется четыре раза :с foo.abc
, bar.abc
,*.def
(с литералом*
)и qux.ghi
. В zsh с параметрами по умолчанию цикл вообще не выполняется, вместо этого вы получаете ошибку
zsh:1: no matches found: *.def
Чтобы избежать запуска цикла с нерасширенным шаблоном подстановочных знаков и запустить цикл с существующими файлами (, если таковые имеются ), добавьте квалификаторN
glob .
for file in *.{abc,def,ghi}(N); do …
Вы также можете использовать оператор|
, чтобы иметь один паттерн вместо нескольких паттернов. (Фигурные скобки не являются шаблоном с подстановочными знаками, это просто буквальное расширение строки, которое происходит до анализа подстановочных знаков, т. е. *.{abc,def,ghi}(N)
— это просто сокращение для*.abc(N) *.def(N) *.ghi(N)
)
for file in *.(abc|def|ghi)(N); do …
Обратите внимание, что вам по-прежнему нужен квалификатор N
glob, иначе вы получите сообщение об ошибке, если ни один файл не соответствует.
Вместо использования квалификатора N
glob можно включить параметр null_glob
(setopt null_glob
). Это часто имеет смысл в сценариях. Обратите внимание, что в bash вам нужно будет активировать аналогичную опцию (shopt -s nullglob
), чтобы избежать запуска тела цикла на нерасширенных шаблонах.