Оператор If в inputrc

Как другой пользователь Virgin Media (Великобритания), я могу засвидетельствовать их плохое управление DNS. С другой стороны, кеширование DNS очень распространено; мгновенной конфигурации DNS нигде не существует (то есть, если у вас нет интрасети с внутренним сервером имен). Пара часов - типичная задержка в кешах DNS.

С другой стороны, нет абсолютно ничего, что заставляло бы вас использовать DNS-сервер вашего интернет-провайдера (на самом деле, некоторые интернет-провайдеры предоставляют вам полностью заблокированное оборудование и запрещают прохождение пакетов UDP , но это не так. случай с Virgin Media). Вам определенно следует использовать сервер имен, которому вы доверяете, а не навязывает ваш интернет-провайдер.

Сервер имен, который я буду использовать в этом примере, - это сервер имен Google ( 8.8.8.8 и 8.8.4.4 ). У вас есть два варианта настройки:

Настроить DNS маршрутизатора

Если ваш маршрутизатор имеет параметры конфигурации для DNS, используйте их и установите их на 8.8.8.8 и 8.8.4.4 ]. Ваш маршрутизатор - это то, что предоставляет все параметры DHCP вашим машинам, и серверы DNS находятся в пределах этих параметров.

Если, как и я, вы используете последнюю версию Virgin Media Super Hub , вы не можете изменить конфигурацию DNS маршрутизатора. Один из способов обойти это - настроить VM Super Hub в качестве модема и использовать другой маршрутизатор в качестве эффективного маршрутизатора. Однако для этого вам потребуется / купить дополнительный маршрутизатор.

Настройте преобразователь DNS на вашем компьютере.

Если вы не можете изменить конфигурацию серверов имен, которые предоставляет вам маршрутизатор, вы можете вместо этого настроить, какие серверы имен будет использовать ваша машина. Ваш вопрос является пограничным для веб-сайта U&L, поскольку он не спрашивает явно ни о чем, связанном с UNIX. Тем не менее, учитывая тот факт, что мы находимся на U&L, я предполагаю, что вы находитесь на машине * nix.

Конфигурация DNS-преобразователя находится в файле /etc/resolv.conf , файл необходимо отредактировать следующим образом:

nameserver 8.8.8.8
nameserver 8.8.4.4

Однако, если вы просто отредактируете этот файл, эта конфигурация будет перезаписана службой DCHP в любой современной системе * nix. Вам также необходимо настроить службу DHCP так, чтобы она не обновляла информацию DNS, когда она получает ее от маршрутизатора. Наиболее распространенная служба DHCP сегодня предоставляется пакетом dhcpcd (я полагаю).

Чтобы настроить dhcpcd на игнорирование информации DNS, которую он получает от маршрутизатора (и не перезаписывать resolv.conf ), необходимо убедиться, что файл / etc / dhcpcd .conf не имеет строки без комментариев:

option domain_name_servers

Обратите внимание, что несколько параметров могут быть установлены в одной строке внутри /etc/dhcpcd.conf . Вам необходимо убедиться, что domain_name_servers не присутствует ни в одной из строк, начинающихся с option .

3
13.04.2017, 15:37
2 ответа

Вам не нужно $include из вашего ~/.inputrc, так как вы можете прочитать файл inputrc в любое время с

bind -f /path/to/global/inputrc

поэтому используйте ваши обычные if [ -r file ] с этим вместо source.


На странице руководства сказано, что для интерактивной оболочки входа в систему она читает /etc/profile и первое найденное из ~/.bash_profile, ~/.bash_login, и ~/.profile. Для других интерактивных оболочек он читает ~/.bashrc, а для неинтерактивных - файл $BASH_ENV, если таковой имеется.

В вашем случае, предположительно, вы используете неинтерактивную оболочку для эмулятора терминала, поэтому читается ~/.bashrc. Вы можете посмотреть, что происходит, используя strace и фиктивный дом, например, в /tmp.

$ touch /tmp/.inputrc /tmp/.bashrc
$ (unset BASH_ENV INPUTRC HISTFILE
   HOME=/tmp strace -e open -o /tmp/out bash -i)

Это показывает, что открываются следующие файлы (я удалил некоторые для краткости):

open("/tmp/.bashrc", O_RDONLY)          = 3
open("/tmp/.bash_history", O_RDONLY)    = -1 ENOENT
open("/tmp/.inputrc", O_RDONLY)         = 3
open("/tmp/.bash_history", O_WRONLY|O_CREAT|O_TRUNC, 0600) = 3

Итак, bash будет читать .inputrc после .bashrc. Это имеет смысл, так как дает вам время установить INPUTRC в вашем файле.

4
27.01.2020, 21:16

Вместо того, чтобы делать это в файле .inputrc (который не имеет средств для проверки того, что файл действительно существует AFAIK), вы можете установить INPUTRC переменную окружения в вашем . bashrc файл:

if [ -r "$GLOBAL_BASHRC" -a -f "$GLOBAL_BASHRC" ]; then
    # Load the bashrc
    source $GLOBAL_BASHRC
    if [ -f /path/to/global/inputrc ]; then
        export INPUTRC="/path/to/global/inputrc"
    fi
else
    echo "Warning: Bashrc file [${GLOBAL_BASHRC}] does not exist!"
fi

Переменная INPUTRC документирована в руководстве readline (и в руководстве bash тоже).

2
27.01.2020, 21:16

Теги

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