Автозаполнение не работает при экспорте переменной среды в bash

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

С точки зрения современных популярных технологий :Любой компьютер, подключенный к одному и тому же ретранслятору или коммутатору Ethernet, является членом одного и того же широковещательного домена. Кроме того, любой компьютер, подключенный к одному и тому же набору коммутаторов/ретрансляторов, соединенных -, является членом одного и того же широковещательного домена. Маршрутизаторы и другие устройства более высокого уровня -формируют границы между широковещательными доменами.

Таким образом, вы не можете настроить широковещательный домен на своей машине, но вы можете найти все машины, используя arpили nmap, как указано в предыдущем ответе.

3
26.08.2019, 13:50
1 ответ

Описанное вами поведение, вероятно, вызвано завершением bash -.

(То, что следует ниже, основано на текущей версии пакета (2.9 ), но оно будет достаточно точным и для имеющейся у вас версии 2.1 ).

bash -завершение предоставляет набор спецификаций завершения,(compspec ), которые библиотека Readline использует для завершения слов, передаваемых в качестве аргументов для команд в Bash. Они определяются с помощью встроенной командыcomplete, обычно в виде:

complete -F function command

Для встроенной функции exportфункция _exportопределена в /usr/share/bash-completion/completions/export.

Когда слово для завершения включает (или заканчивается на )=, _exportпытается завершить его (часть справа от первой =, на самом деле )как имя файла или каталога; когда слово для завершения не включает =, оно пытается завершить его как имя переменной. Поскольку библиотека Readline запускает новое завершение каждый раз, когда встречается с одним из символов, перечисленных в переменной COMP_WORDBREAKS(, если только символ не экранирован ), который обычно включает :, завершение перестает работать после первого двоеточия. вы добавляете к значению переменной, потому что в этот момент слово для завершения больше не включает (или не заканчивается на )на =.
(Кстати, обратите внимание, что завершение имени файла/каталога снова начинает работать, если вы напишете export myvar=/usr/:othervar=и нажмете Tab).

Дополнение bash -действительно имеет собственный механизм для обработки особых случаев. Например, :правильно обрабатывается спецификацией compspec для scp, которая интерпретирует то, что находится справа от двоеточия, как удаленный путь. Однако то же самое не относится к export.

Поведение Readline по умолчанию , которое запускается, когда спецификация для текущей команды не найдена, в конечном итоге заключается в попытке завершения имени файла.Вот почему завершение path2в export var=/path1/:/path2/работает, когда дополнение bash -не установлено или отключено иным образом (помните, что каждое двоеточие запускает новое завершение ).

Что же ты можешь сделать? У вас есть несколько альтернатив:

  1. Отправьте запрос функции на bash -завершение на GitHub .

  2. Определите собственную функцию завершения для export.
    Во-первых, скопируйте compspec в файл завершения пользователя (, который, скорее всего, еще не существует ):

    .
    $ cat /usr/share/bash-completion/completions/export >>~/.bash_completion
    

    Затем отредактируйте ~/.bash_completion, заменив complete -F _export exportна complete -F _export -o default export. Это указывает Readline попытаться выполнить завершение по умолчанию, когда конкретная спецификация exportне дает результатов.

  3. Используйте автодополнение по умолчанию вместо того, которое предоставляется автодополнением bash -.
    Добавьте в свой~/.bashrc:

    complete -o default -o bashdefault export
    

    (Предложение из bash -FAQ по завершению). Недостатком является то, что вы теряете возможность заполнять имена переменных и опции export.

  4. Если вы хотите достаточно хорошо ознакомиться с дополнением bash -, определите свою собственную функцию _export, как в (2 ), отредактировав предоставленную функцию, чтобы она специально обрабатывала :.

2
27.01.2020, 21:24

Теги

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