Как запросить пользовательский ввод с помощью $EDITOR из скрипта?

Вы используете совершенно неправильный инструмент для работы.

Это задание не выполняется в клиентской библиотеке DNS. Клиентские библиотеки DNS недостаточно сложны, чтобы принимать решения о маршрутизации запросов к различным наборам содержимого DNS-сервера на основе искомого имени. Клиентские библиотеки DNS делегируют тяжелую работу по разрешению запросов, в том числе такого рода, разрешению прокси-серверов DNS. Они реализуют разделенную -службу DNS Horizon , которая является механизмом, который вам здесь нужен.

В вашем случае, если вы используете только то, что поставляется с FreeBSD (или ее производными, такими как DragonFly BSD и TrueOS ), из коробки, это будет экземпляр unbound, работающий локально.

Вы делаете три вещи:

  • Вы бежите unbound. Включите автоматический запуск с помощью local_unbound_enable=YESв /etc/rc.confобычным способом.
  • Вы настраиваете unboundдля выполнения службы DNS с разделенным горизонтом. Вы делаете это с зонами-заглушками в unbound.confдля вашего lab.example.com.и вашего home.example.com.доменов, обозначая 10.0.0.10и 192.168.1.1как контентные DNS-серверы для этих доменных имен и всего остального. под ними.
  • Вы указываете клиентской библиотеке DNS запрашивать ваш сервер и только ваш сервер. У вас есть одна строка nameserverв/etc/resolv.conf(из одной пары name_serversключ -значение в /etc/resolvconf.conf), которая указывает вашей клиентской библиотеке DNS обращаться к unbound.

Примечания:

  • Вы не используете home.и lab.. Это настоящие доменные имена верхнего -уровня, которыми вы не владеете . home.в настоящее время является предметом 10 заявок в ICANN. Используйте доменное имя , которым вы владеете , а не те, которыми вы не владеете. Замените это на example.com.выше. Нет, у вас нет local., localhost., dev., corp.и многих других.

    Если, например, у вас есть radiantnexus.com., вы должны использовать home.allan.radiantnexus.com.и lab.allan.radiantnexus.com..

  • Правильно настройте домены поиска ,если вы хотите, чтобы в вашем локальном пространстве имен были найдены не -полные доменные имена.

    search_domains="home.allan.radiantnexus.com lab.allan.radiantnexus.com"продолжить приведенный выше пример.

  • Не думайте, что вы можете прибегнуть к чужим разрешающим прокси-серверам DNS. Большой ошибкой является добавление разрешающего прокси-сервера DNS, предоставленного вашим -автономным -маршрутизатором, вашим интернет-провайдером или Google. Все серверы, с которыми напрямую взаимодействует ваша клиентская библиотека DNS , должны предоставлять одно и то же представление пространства имен DNS, согласованное друг с другом. Google Public DNS ничего не знает о вашем внутреннем пространстве имен, для начала. Если вам нужен резервный DNS-сервер, вам понадобится еще один локальный DNS-сервер где-нибудь, настроенный с вашей той же разделенной -настройкой горизонта.
  • Вам также потребуются зоны-заглушки для всех не -общедоступных IPv6 и IPv4-адресов с -по -имен для поиска имен. На самом деле их довольно много, и поисковый трафик для них действительно не должен просачиваться за пределы вашей/вашей организации. И да, они действительно должны быть зонами-заглушками, а не локальными, если вы хотите, чтобы поиск по имени с адресом -по -работал для аренды, выдаваемой вашим комбинированным DHCP/DNS-сервером.

Бонусный контент

Я использую djbdns (, исправленный… ну… мной )на FreeBSD.

  • Подсистема импорта конфигурации набора инструментов nosh настраивает меня с помощью службы dnscache@127.0.0.1, которая запускает локальный разрешающий прокси-сервер DNS, а также службы tinydns@127.53.0.1и axfrdns@127.53.0.1, которые запускают локальный DNS-сервер корневого содержимого, который dnscache@127.0.0.1разговаривает с.

    Я включаю эти службы с помощью enableдиректив в/etc/system-control/presets/20-djbwares.preset:

    enable axfrdns@127.53.0.1
    enable cyclog@axfrdns
    enable tinydns@127.53.0.1
    enable cyclog@tinydns
    enable dnscache@127.0.0.1
    enable cyclog@dnscache
  • Локальный корневой DNS-сервер содержит в своей базе данных смесь общедоступных .данных, получаемых от ICANN каждый год или около того с использованием axfr-get, и данных для внутренних имен под доменными именами, которыми я владею.
    % ls -dl root/{data*,p*,root*,Makefile}
    -rw-r--r--  1 root   wheel      968 16 Sep 09:43 root/Makefile
    -rw-r--r--  1 root   wheel   571334 28 Nov 00:33 root/data
    -rw-r--r--  1 root   wheel  1088169 28 Nov 00:33 root/data.cdb
    -rw-r--r--  1 root   wheel     3243 16 Sep 09:55 root/private
    -rw-r--r--  1 root   wheel     6962 28 Nov 00:32 root/public
    -rw-r--r--  1 root   wheel   560853 11 Mar  2017 root/root
    -rw-r--r--  1 root   wheel  3668733 11 Mar  2017 root/root.zone
    %

    В файле root/privateя буду хранить личные данные, такие как:

    =machine97.jdebp.eu:192.168.100.97:::lo
  • Я клонирую файл root/servers/@в dnscache@127.0.0.1для различных точек обрезки разделенного горизонта, чтобы dnscacheзнал, что нужно переопределять любую информацию об адресах DNS-серверов общедоступного контента для тех точек, которые могут быть отправлены:
    % ls -dli root/servers/{@,C.E.F.ip6.arpa,machine97.jdebp.eu}
    352608 -rw-r--r--  46 root  wheel  11 23 Nov  2016 root/servers/@
    352608 -rw-r--r--  46 root  wheel  11 23 Nov  2016 root/servers/C.E.F.ip6.arpa
    352608 -rw-r--r--  46 root  wheel  11 23 Nov  2016 root/servers/machine97.jdebp.eu
    %
    (На самом деле, набор инструментов nosh стандартно устанавливает для меня частные IP-адреса. В nosh Guide есть целая глава о том, что предоставляется, и о различных способах его использования.)

Это частная установка root . Это один из других способов, (которых существует несколько )предоставления службы DNS с разделенным -горизонтом с двумя контентными DNS-серверами. (В описанной выше конфигурации unboundу вас также есть несколько контентных DNS-серверов; вашими локальными DNS-серверами являются серверы 10.0.0.10и 192.168.1.1на других машинах в вашей локальной сети, а не частные серверы на 127.53.0.1на самой машине.)

Частный корень также дает мне преимущество ложного трафика DNS-запросов для несуществующих вещей, от зондов Google Chrome до вещей, которые пытаются инвертировать -адреса IPv6 в fec0::/12и адреса IPv4 в 192.168.0.0/16, а не убежать в интернет на свободе.

Вы также можете сделать приватный корень с помощью unbound. Однако это сложнее, чем тупиковые зоны. Я оставляю это как упражнение для читателя, поскольку оно выходит за рамки этого ответа.

Дополнительная литература

0
14.01.2020, 15:08
2 ответа

Одним из решений является встроенная команда read.

 read -r -p 'Please enter your favorite editor' editor
 echo "You have enter $editor"

Теперь значение находится в переменной $editor". Следующим шагом будет проверка, действительно ли редактор установлен или находится в вашем PATH.

if type "$editor" >/dev/null 2>&1; then
   command "$editor" ENTER_THE_FILE_YOU_WANT_TO_EDIT
else
   echo "$editor no such file or directory!" >&2
   exit 127
fi

см.

help type
help command

Статус выхода 127 — это то, что оболочка завершит работу, если нет исполняемой псевдонимной функции.посмотри на

 man 1p exit
1
28.01.2020, 02:56

Вы можете использоватьvipeбез ввода (или некоторого текста по умолчанию ):

% foo=$(echo | vipe)
# opens an editor, I add `foo bar`
% echo "$foo"
foo bar

vipeпозаботится о создании временного файла и его удалении.

0
28.01.2020, 02:56

Теги

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