Вы правы в своих предположениях.
Более подробная документация скрыта в info bash
:
3.5.3 Расширение параметров оболочки
[...]
Основная форма расширения параметра -
$ {ПАРАМЕТР}
. Подставляется значениеПАРАМЕТР
.ПАРАМЕТР
- это параметр оболочки, описанный выше (* обратите внимание на параметры оболочки: :) или ссылку на массив (* обратите внимание на массивы: :). Фигурные скобки необходимы, когдаПАРАМЕТР
является позиционным параметром с более чем одной цифрой или когда заПАРАМЕТР
следует символ , который не должен интерпретироваться как часть его названия.Если первый символ
ПАРАМЕТРА
является восклицательным знаком (!
), аПАРАМЕТР
не является NAMEREF, он вводит уровень косвенного обращения к переменной .Bash использует значение переменной, образованное из остатка изПАРАМЕТРА
, в качестве имени переменной; затем эта переменная раскрывается , и это значение используется в остальной части подстановки, а не значение самогоПАРАМЕТРА
. Это известно как «непрямое расширение». ЕслиПАРАМЕТР
является ссылкой на имя, это расширяется до имени переменной , на которую ссылаетсяПАРАМЕТР
, вместо выполнения полного косвенного расширение. Исключением являются расширения$ {! PREFIX *}
и$ {! NAME [@]}
, описанные ниже. Восклицательный знак должен стоять сразу после левой фигурной скобки , чтобы ввести косвенное обращение.
Поскольку утилита host
выполняет поиск DNS, она не использует /etc/hosts
. Это означает, что для успеха хост должен находиться где-то на DNS-сервере.
Поскольку вопрос здесь, я предполагаю, что добавление этой DNS-записи на ваш DNS-сервер (тот, что по адресу 192.168.101.2) не вариант.К счастью, вы можете довольно легко решить эту проблему, поскольку используете NetworkManager (как указано в строке комментария в вашем /etc/resolv.conf
).
Решение состоит в том, чтобы включить и настроить dnsmasq. dnsmasq — это сервер пересылки DNS, работающий на локальном хосте. Он может выполнять простые задачи, такие как рекурсивный поиск и кэширование результатов. Он также может выполнять такие действия, как обслуживание записей из /etc/hosts
. NetworkManager имеет встроенную функциональность для управления dnsmasq. Поэтому использовать его очень просто.
Часть конфигурации заключается в том, чтобы указать dnsmasq обслуживать записи из /etc/hosts
, поскольку конфигурация по умолчанию, которую NetworkManager использует для dnsmasq, не включает эту функцию.
Создайте файл /etc/NetworkManager/dnsmasq.d/hosts.conf
со следующим содержимым:
addn-hosts=/etc/hosts
Включение выполняется добавлением dns = dnsmasq
в раздел [main]
файла /etc/NetworkManager/NetworkManager.conf
. Например:
[main]
dns = dnsmasq
После этого перезапустите NetworkManager (через systemctl перезапустите NetworkManager.service
).
Теперь вы должны заметить, что /etc/resolv.conf
содержит только одну запись nameserver
, указывающую на 127.0.0.1
. Любые инструменты, которые обращаются к /etc/resolv.conf
для поиска серверов имен, теперь должны в конечном итоге обращаться к dnsmasq и получать записи, найденные в /etc/hosts
.Если запись не существует в /etc/hosts
, поиск будет переадресован на вышестоящий DNS-сервер (192.168.101.2).